Q1。在下面的代码行中,首先发生了什么:内存分配,还是构造函数调用?
int *ptr = new int();
Q2。删除对象的以下三种方法有什么区别?
DELETE
运算符销毁对象;是调用了析构函数吗?a1.~A()
)来销毁对象?DELETE
运算符)。如果析构函数是私有的或受保护的,那么行为是什么?
答案 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.
这个问题含糊不清。它的删除方面意味着对象是在堆上分配的,在这种情况下它永远不会超出范围......但是指向对象的指针可以超出范围。如果这就是你所说的,那么你就会有内存泄漏。
但是,如果您正在讨论堆栈分配的对象,那么当它超出范围时将调用它的析构函数。