我希望能够将auto_ptr作为参数传递给构造函数。但是如果无法创建新对象(可能是没有内存的bcoz),那么我希望原始的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错误。 什么是避免这个问题的好方法。如果创建了一个新对象并将所有权传递给其成员变量,则可以。我希望能够在foo()中使用autop1,如果无法创建新的B对象并且autop2将具有NULL。
答案 0 :(得分:3)
您可以通过引用将auto_ptr传递给B
的构造函数,并且只有在知道构造函数成功时才将其分配给成员变量。