我希望能够将 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,并且当 new 运算符返回而不创建对象时,autop1 值被破坏。当我们尝试访问 autop1 时,会导致 seg 错误。有什么好的方法可以避免这个问题。如果创建了一个新对象并将所有权传递给它的成员变量,那也没关系。如果无法创建新的 B 对象并且 autop2 将具有 NULL,我希望能够在 foo() 中使用 autop1。