http://www.cnblogs.com/chio/archive/2007/09/10/888303.html

本文探讨了C++中析构函数的动态绑定特性及如何通过私有化析构函数来控制对象的创建与销毁过程。同时介绍了伪析构函数的概念及其在限制对象实例化方面的应用。
TEST1: #include using namespace std; class Base { public: virtual ~Base() { cout << "Base dtor!" << endl; } }; class Derived : public Base { private: virtual ~Derived() { cout << "Derived dtor!" << endl; } }; int main() { Derived* pd=new Derived; //delete pd; //error,相当于调用pd->~Derived() Base* pb=new Derived; delete pb; return 0; } /* * Base的dtor可见,虽然会被virtual到Derived的dtor上去,这就是所谓的dynamic binding可以突破访问权限,其实访问权限本来就是只有在编译期起作用的,想清楚编译期和运行时其实很容易理解上面代码 * */ TEST2: #include using namespace std; class Base { public: void destroy() //伪析构 { cout << "DTOR"<< endl; delete this; } private: ~Base() {} }; int main() { Base *pb = new Base;//ok pb->destroy(); Base b; //error: "cannot access private member declared in class 'Base'" b.destroy(); return 0; } /* 不论是静态的或是普通成员函数都是可以通过delete或delete this删掉这样的一个对象。 这种私有dtor加上刚才说的伪析构的成员函数可以达到只允许new来创建对象实例, 而不允许直接定义实例的效果。 */ /*因为b 是局部变量(auto),所以生命期末会调用析构函数,而析构函数为private*/ 摘自:http://www.cnblogs.com/chio/archive/2007/09/10/888303.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值