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

C++ 将auto_ptr作为参数传递给构造函数,c++,constructor,arguments,auto-ptr,C++,Constructor,Arguments,Auto Ptr,我希望能够将auto_ptr作为参数传递给构造函数。但是如果无法创建新对象(可能是因为没有内存),那么我希望原始的auto_ptr能够保留其值 例如: foo(Auto_ptr autop1){ 自动ptr autop2(新B(10,autop1,40)); 如果(!autop2.get())autop1.callFunc();>>>分段错误;但我想这样做! } B类{ 公众: B(int var1,Auto_ptr var2,int var3): _var1(var1),_var2(var2)

我希望能够将auto_ptr作为参数传递给构造函数。但是如果无法创建新对象(可能是因为没有内存),那么我希望原始的auto_ptr能够保留其值

例如:

foo(Auto_ptr autop1){
自动ptr autop2(新B(10,autop1,40));
如果(!autop2.get())autop1.callFunc();>>>分段错误;但我想这样做!
}
B类{
公众:
B(int var1,Auto_ptr var2,int var3):
_var1(var1),_var2(var2),_var3(var3){
私人:
int_var1,_var3;
自动ptr变量3;
}
在函数foo()中,由于内存不足,未创建新对象B,当新运算符返回而未创建对象时,autop1值被销毁。当我们试图访问autop1时,它会导致seg故障。
避免这个问题的好方法是什么。如果创建了一个新对象并将所有权传递给其成员变量,则可以。如果无法创建新的B对象并且autop2将为NULL,我希望能够在foo()中使用autop1

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

但是我如何知道构造函数是否会成功。在我看来,知道构造函数是否成功的唯一方法是检查分配给新对象的auto_ptr是否为null。有没有其他方法可以知道构造函数是否成功(当我在构造函数中时)?当你在构造函数中时,你知道它是否成功。里面是你的代码,不是吗?
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;
}