析构函数声明为私有的作用

来源:互联网 发布:淘宝汽车超人假机油 编辑:程序博客网 时间:2024/05/17 03:44

当我们规定类只能在堆上分配内存时,就可以将析构函数声明为私有的。

class alloc

{

public:

    alloc():

private:

   ~alloc();

};

 

如果在栈上分配空间,类在离开作用域时会调用析构函数释放空间,此时无法调用私有的析构函数。

如果在堆上分配空间,只有在delete时才会调用析构函数。

 

可以添加一个destroy()函数来释放,从而解决不能在析构函数中添加delete的问题。

class alloc

{

public:

    alloc():

 destroy(){ delete this;}  

private:

   ~alloc();

};


实例测试:

设置为私有未new:

#include<iostream>using namespace std;class A{    public:        A() {};        void Get() { std::cout << "AAA" << std::endl;};    private:        ~A() {};};int main(){    A a;    a.Get();    return 0;}
结果:



在堆空间申请:

#include<iostream>using namespace std;class A{    public:        A() {};        void Get() { std::cout << "AAA" << std::endl;};    private:        ~A() {};};int main(){    A* a = new A();    a->Get();    return 0;}
结果:

正常输出:AAA

阅读全文
0 0
原创粉丝点击