C ++分配,构建和销毁问题

时间:2009-06-15 19:02:41

标签: c++

Q1。在下面的代码行中,首先发生了什么:内存分配,还是构造函数调用?

int *ptr = new int();

Q2。删除对象的以下三种方法有什么区别?

  1. 如果使用DELETE运算符销毁对象;是调用了析构函数吗?
  2. 如果明确调用析构函数(例如a1.~A())来销毁对象?
  3. 该对象超出了范围(即,既没有显式的析构函数调用也没有使用DELETE运算符)。
  4. 如果析构函数是私有的或受保护的,那么行为是什么?

1 个答案:

答案 0 :(得分:3)

好吧,好吧,我已经给你的问题一个有意义的标题,所以我也会尝试回答它们。 (虽然你真的应该在多个帖子中提出多个问题)。

<强> Q1 即可。分配首先发生。这显然是这种情况,因为在分配之前,对象不存在。只有这样,构造函数才能运行并为对象赋值。

<强> Q2

1. If an object is destroyed with DELETE operator. Will destructor be called?

2. If a destructor is called explicitly (e.g. a1.~A()) to destroy the object?

这里没有真正的问题。

3. Neither explicit destructor call is made nor DELETE operator is used to destroy the object but object goes out of scope.

这个问题含糊不清。它的删除方面意味着对象是在堆上分配的,在这种情况下它永远不会超出范围......但是指向对象的指针可以超出范围。如果这就是你所说的,那么你就会有内存泄漏。

但是,如果您正在讨论堆栈分配的对象,那么当它超出范围时将调用它的析构函数。