我在使用 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 删除其存储的指针时,向量中的关联指针不再指向任何东西,但为什么会阻止向量正确破坏呢?
谢谢