防止内存泄露的一些Tips

来源:互联网 发布:手机app界面设计软件 编辑:程序博客网 时间:2024/05/06 07:41

1.如果在构造函数里new了一个对象并使用成员指针变量来保存,那么必须在析构函数里delete它,并且不能为了某些便利而将这个对象的所有权转让出去的事情发生。

 

2.尽量使用shared_ptr。只要不发生循环引用,那么这个东西可以让你的对象安全地互相传递,随便放在什么容器里面添加删除,再也不用考虑生命周期问题了。(什么是循环引用?简单来说就是,两个对象都使用了一个shared_ptr成员变量直接或者间接指向对方。这时候,引用计数就失效了。)

 

3.慎用memset和memcpy,尤其是在针对有构造函数的对象时。
        a)对象中有string成员,memset一下,就呵呵了。
        b)对象是派生类对象,由于父类内部结构的演变不需要对子类负责,如果哪天父类里面加一个vector成员,就呵呵了。
        c)对象中保存有new出来的内存块指针,memset一下,析构函数里的delete就失去意义了。
        d)类中有虚函数,memset也会把对象中的虚函数表指针覆盖掉。

 

4.如果需要为一个对象定义构造函数,那么连复制构造函数、operator=重载和析构函数全部写全。如果不想写的话那么就用一个空的实现并标记为private,确保任何试图调用这些函数的代码都出现编译错误,这样可以防止一些你不知道的隐式调用致使你的代码失控。

0 0
原创粉丝点击