2017-07-04 26 views
-2
class MyClass 
{ 
    public: 
     MyClass() 
     { 
      std::cout << "MyClass Constructor" << std::endl; 
     } 

     ~MyClass() 
     { 
      std::cout << "MyClass Destructor" << std::endl; 
     } 
}; 

int main() 
{ 
    MyClass* p = new MyClass(); 
} 

是什么 主叫P->〜MyClass的()之间的差值; 或 删除p;Differnace和 “P->〜MyClass的()”

两者都调用析构函数。

+0

'delete'也会将分配的内存返回给操作系统。我不认为这样明确地调用析构函数是合法的,无论如何 –

+3

@ Code-Apprentice明确地调用析构函数是合法的,但在这种情况下,你不能显式地调用析构函数,因为你需要'删除'内存,'delete'调用析构函数,析构函数会两次调用析构函数,这是非法的。 – Justin

+0

@ Code-Apprentice如果它在任何地方都不合法,语言不会允许你编写它 –

回答

2

使用new运营商将:

  1. 分配的内存块。
  2. 调用该类的构造函数,其中this指向该内存。

delete是什么new不只是失败的原因,所以它会在默认情况下:

  1. 调用析构函数与this指向的内存块。
  2. 释放内存块。

当然,您可以重载这些运算符以表现不同的行为。

+3

“重载的'delete'操作符需要手动调用析构函数”这不是它的工作原理。 –

+0

是的,你说得对。据此编辑。 – Mitch

相关问题