У меня возникли трудности с сбоем, используя auto_ptr. Я знаю, что вы не можете хранить auto_ptr в контейнерах STL. Но как насчет сохранения значений указателя, удерживаемых auto_ptr внутри вектора? Если auto_ptr удаляет сохраненный объект, на который они указывают, последующее уничтожение вектора, который хранит эти внутренние указатели, приводит к сбою моей программы в методе Tidy_ векторов.Сохранение указателей, принадлежащих auto_ptr's, в векторе, вызывающем сбой
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 удаляет свой сохраненный указатель, связанный с ним указатель в векторе больше не указывает на что-либо, но почему это может помешать правильному разрушению вектора?
Благодаря
http://www.gotw.ca/publications/using_auto_ptr_effectively.htm –
Спасибо, но не отвечает на мой вопрос. – AdamDH
Что делает 'ClassP'? – jxh