Я хочу иметь возможность передать auto_ptr в качестве аргумента в конструктор. Но если новый объект не может быть создан (вероятно, из-за отсутствия памяти), то я хочу, чтобы оригинальный auto_ptr мог сохранять свое значение.
Например:
foo (Auto_ptr<A> autop1) {
Auto_ptr<B> autop2(new B(10, autop1, 40));
if (!autop2.get()) autop1.callFunc(); >>> segmentation fault; But I want to do this!
}
Class B{
public:
B(int var1, Auto_ptr<A> var2, int var3):
_var1(var1), _var2(var2), _var3(var3){ }
private:
int _var1, _var3;
Auto_ptr<A> _var3;
}
В функции foo () новый объект B не был создан из-за нехватки памяти, а значение autop1 было уничтожено, когда новый оператор вернулся без создания объекта. И когда мы пытаемся получить доступ к autop1, это приводит к ошибке сегмента.
Что является хорошим способом избежать этой проблемы. Это нормально, если новый объект был создан, и право собственности было передано его переменным-членам. Я хочу иметь возможность использовать autop1 в foo (), если новый объект B не может быть создан и autop2 будет иметь значение NULL.