类和指针删除

时间:2013-10-31 07:39:18

标签: c++ pointers

我有一个关于删除对象和指向它们的问题。 第一次测试:

  a test;
  a* test_ptr;
  test_ptr = &test;
  test.aPrint();
  test_ptr->aPrint();
  delete(test_ptr);
  test.aPrint();

我在构造函数中添加了printout,析构函数和函数aPrint打印文本“aPrint”(ob)。

constructor
aPrint
aPrint
destructor
aPrint
destructor

如何两次调用析构函数? 如何在删除后仍然使用对象测试?

- - - - - - - - 编辑

所以,如果我使用新的。然后我必须使用删除,否则我就会泄漏。

a* test_ptr;
test_ptr = new a;
test_ptr->aPrint();
delete(test_ptr);

这是因为这个例子使用的堆是第一个使用堆栈的例子吗?

2 个答案:

答案 0 :(得分:1)

未使用new分配对象,因此调用delete是未定义的行为。只是让它超出范围,并自动调用析构函数(在你的例子中第二次调用)。

答案 1 :(得分:1)

由于您的对象在堆栈上,当此对象超出范围时,将调用其析构函数。

您正在删除一次,编译器会再次隐式调用析构函数。

这就是为什么析构函数被调用两次。

但是,此类程序的行为尚未定义,并且可以用于双重删除的任何副作用。