测试,如果对象被删除

jus*_*tik 4 c++ testing object delete-operator

请查看以下代码:

class Node
{
private:
    double x, y;
public:
    Node (double xx, double yy): x(xx), y(yy){}
};

int main()
{
  Node *n1 = new Node(1,1);
  Node *n2 = n1;

  delete n2; 
  n2 = NULL;

  if (n1 != NULL) //Bad test
  {
     delete n1;   //throw an exception
  }
}
Run Code Online (Sandbox Code Playgroud)

有两个指针n1,n2指向同一个对象.我想检测是否使用n1指针测试删除了n2.但是这个测试结果是例外.

有没有办法如何使用n1指针确定对象是否被删除(或未被删除)?

Gui*_*ici 11

据我所知,处理这种情况的典型方法是使用引用计数指针,例如COM的方式.在Boost中,有一个可以提供帮助的shared_ptr模板类(http://www.boost.org/doc/libs/1_42_0/libs/smart_ptr/shared_ptr.htm).

  • +1:boost :: shared_ptr非常高效.您甚至不必自己调用delete,并且可以为指向的值提供自己的析构函数. (2认同)