1

我有这样的情况:

class MyClass
{
private:
  std::auto_ptr<MyOtherClass> obj;

public:
  MyClass()
  {
    obj = auto_ptr<MyOtherClass>(new MyOtherClass());
  }

  void reassignMyOtherClass()
  {
    // ... do funny stuff
    MyOtherClass new_other_class = new MyOtherClass();
    // Here, I want to:
    //  1) Delete the pointer object inside 'obj'
    //  2) Re-assign the pointer object of 'obj' to 'new_other_class'
    //     so that 'obj' now manages 'new_other_class' instead of the
    //     object that just got deleted manually
  }
};

有没有办法做到这一点?下面的代码会做我想要的吗?

void MyClass::reassignMyOtherClass()
{
  // ... still, do more funny stuff (flashback humor :-)
  MyOtherClass new_other_class = new MyOtherClass();
  obj.reset(new_other_class);
}

的内存new_other_class会在 的默认析构函数中被取消分配MyClass吗?

4

2 回答 2

4

是的,它会。您可以使用

obj.reset( new MyOtherClass() );

我最好使用这样的构造函数

 MyClass():
     obj( new MyOtherClass() )
 {
 }
于 2009-03-27T16:05:17.543 回答
1

来自MSDN的描述reset

成员函数计算表达式 delete myptr,但前提是存储的指针值 myptr 由于函数调用而发生更改。然后它用 ptr 替换存储的指针。

它会做你想做的事。

于 2009-03-27T16:09:46.547 回答