将auto_ptr作为参数传递给构造函数

时间:2011-02-17 08:53:45

标签: c++ constructor arguments auto-ptr

我希望能够将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。

1 个答案:

答案 0 :(得分:3)

您可以通过引用将auto_ptr传递给B的构造函数,并且只有在知道构造函数成功时才将其分配给成员变量。