auto_ptr を使用したクラッシュで問題が発生しています。auto_ptr を STL コンテナーに格納できないことは承知しています。しかし、auto_ptr が保持するポインター値をベクター内に格納する場合はどうでしょうか? auto_ptr がそれらが指す格納されたオブジェクトを削除すると、これらの内部ポインターを格納したベクターがその後破棄されると、ベクターの Tidy_ メソッドでプログラムがクラッシュします。
ClassA {
public:
ClassA() {
auto_pointer_1_.reset(new ClassP());
auto_pointer_2_.reset(new ClassP());
auto_pointer_3_.reset(new ClassP());
};
std::auto_ptr<ClassP> auto_pointer_1_;
std::auto_ptr<ClassP> auto_pointer_2_;
std::auto_ptr<ClassP> auto_pointer_3_;
};
ClassB {
public:
ClassB(ClassA& a_class_a_) {
vector_of_pointers_.push_back(a_class_a_.auto_pointer_1_.get());
vector_of_pointers_.push_back(a_class_a_.auto_pointer_2_.get());
vector_of_pointers_.push_back(a_class_a_.auto_pointer_3_.get());
};
std::vector<ClassP*> vector_of_pointers_;
};
void main(void) {
ClassA* class_a_variable_ = new ClassA();
ClassB* class_b_variable_ = new ClassB(*class_a_variable_);
delete class_a_variable_;
delete class_b_variable_; <--- CRASH in std::vector Tidy_ method
}
クラッシュが発生する理由を誰かに説明してもらえますか? auto_ptr が格納されたポインターを削除すると、ベクター内の関連付けられたポインターはもはや何も指していませんが、なぜベクターが適切に破棄されないのでしょうか?
ありがとう