C++ 中的私有析构函数


下面将探讨 C++ 中析构函数为私有时的具体情况。我们来看一些示例代码来了解基本原理。

此代码具有私有析构函数,但不会生成任何错误,因为没有创建对象。

示例

#include <iostream>
using namespace std;
class my_class {
   private:
      ~my_class(){
         //private destructor
      }
};
int main() {
}


由于试图创建一个对象,但编译器会发现无法访问析构函数,因此在该程序中,这将导致编译错误。因此,它无法在完成任务后被销毁。

示例

#include <iostream>
using namespace std;
class my_class {
   private:
      ~my_class() {
         //private destructor
      }
};
int main() {
   my_class obj;
}

输出

[Error] 'my_class::~my_class()' is private

现在,如果我们为该类创建一个指针,则不会产生错误,因为没有创建实际对象。

示例

#include <iostream>
using namespace std;
class my_class {
   private:
      ~my_class() {
         //private destructor
      }
};
int main() {
   my_class *obj;
}


如果使用 new 运算符创建一个对象,则也不会产生任何错误。编译器认为由程序员负责从内存中删除对象。

示例

#include <iostream>
using namespace std;
class my_class {
   private:
      ~my_class() {
         //private destructor
      }
};
int main() {
   my_class *obj = new my_class;
}

输出

现在,如果我们添加 delete 语句来删除对象,则它将为私有析构函数生成错误。

示例

#include <iostream>
using namespace std;
class my_class {
   private:
      ~my_class() {
         //private destructor
      }
};
int main() {
   my_class *obj = new my_class;
   delete obj;
}

输出

[Error] 'my_class::~my_class()' is private

更新于:2019 年 7 月 30 日

642 次浏览

开启你的 职业

通过完成学习课程获得认证

开始
广告
© . All rights reserved.