能直接调用析构函数,不能直接调用构造函数

Posted 药剂学徒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了能直接调用析构函数,不能直接调用构造函数相关的知识,希望对你有一定的参考价值。

  在我们进行面向对象程序设计的时候,我们肯定要设计自己的类,这样一来,我们就需要设计自己需要的构造函数和析构函数,那么我们可以通过指针直接调用构造函数和析构函数吗?

进行验证:

#include <iostream>
using namespace std;
//程序说明直接调用构造函数会出现错误,直接调用析构函数是成功的。 
class A{
	public:
		int id;
		A(int i):id(i){cout<<"ctor.this = "<<this<<" id = "<<id<<endl;
		}
		~A(){cout<<cout<<"dtor.this = "<<this; 
		}
};
int main3(){
	A* pa = new A(1);
	cout<<pa->id<<endl;
	cout<<"直接调用构造函数失败:"<<endl;      
	//pa->A(1);  
	cout<<"直接调用析构函数成功:"<<endl;
	//delete pa;
	pa->~A() ;
	return 0;
} 

  经过上述代码,我们发现,在类外直接调用构造函数是不行的,但是可以直接调用析构函数。

以上是关于能直接调用析构函数,不能直接调用构造函数的主要内容,如果未能解决你的问题,请参考以下文章

构造函数 析构函数 拷贝构造函数 ~~~~~~~~~~构造函数

(笔记):构造函数与析构函数

构造函数拷贝构造函数析构函数

如何能避免在调用子类对象的虚函数时调用父类的虚函数呢?

直接调用(虚拟)析构函数是不是有效?

析构函数为啥能释放对象内存?