C ++中的私有析构函数

在这里,我们将了解如果析构函数在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