3

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

4

1 回答 1

3

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

于 2011-02-17T09:02:19.173 回答