C++之对象的动态内存分配

对象的动态内存分配问题主要包括三个问题包括释放内存,处理对象复制,处理对象的赋值。

先说释放内存。释放内存使用析构函数释放的,如果使用了new在堆上创建了对象可以选择在析构函数里面释放内存。析构函数可以做很多事,最好只让他释放内存或者清理资源。

再说处理复制与赋值。一般情况下,默认的赋值运算符或者说复制构造函数,编译器只会提供表层的赋值与复制:只是将数据成员从源对象直接复制或者赋值到目标对象。一般情况下这样问题不大,但是当你用指针指向一个对象,然后赋值或者复制这个指针的时候问题就来了。先说复制。C++之对象的动态内存分配

当使用复制时情况也不怎么样。C++之对象的动态内存分配

被遗弃的内存就叫做内存泄漏。这就是在赋值运算符中首先释放左边引用的内存,然后再进行深层复制的原因。

因此,默认的复制构造函数或者赋值运算符有时候就会出现一些问题。

SO,无论什么时候在类中动态分配了内存,都应该编写自己的复制构造函数和赋值运算符,以提供深层的内存复制