在这里,我们将了解如果析构函数在C ++中是私有的,将是什么情况。让我们看一些示例代码来了解这个想法。
该代码具有私有析构函数,但由于未创建任何对象,因此不会产生任何错误。
#include <iostream> using namespace std; class my_class { private: ~my_class(){ //私有析构函数 } }; int main() { }
在此程序中,当我们尝试创建一个对象时,这将产生编译错误,但是编译器会注意到析构函数不可访问。因此,它不能在完成任务后销毁。
#include <iostream> using namespace std; class my_class { private: ~my_class() { //私有析构函数 } }; int main() { my_class obj; }
输出结果
[Error] 'my_class::~my_class()' is private
现在,如果我们为该类创建一个指针,则不会生成错误,因为不会创建任何实际对象。
#include <iostream> using namespace std; class my_class { private: ~my_class() { //私有析构函数 } }; int main() { my_class *obj; }
如果使用new运算符创建了一个对象,则也不会产生错误。编译器认为这是程序员从内存中删除对象的责任。
#include <iostream> using namespace std; class my_class { private: ~my_class() { //私有析构函数 } }; int main() { my_class *obj = new my_class; }
输出结果
现在,如果我们添加delete语句删除对象,它将为私有析构函数生成错误。
#include <iostream> using namespace std; class my_class { private: ~my_class() { //私有析构函数 } }; int main() { my_class *obj = new my_class; delete obj; }
输出结果
[Error] 'my_class::~my_class()' is private