动态内存与智能指针
使用动态内存出于以下三种原因
- 程序不知道自己需要使用多少对象
典型的例子:
数组,当我们不知道数组的大小时,就需要new一个空间。
标准库的容器类也有动态改变大小的功能。 - 程序不知道所需对象的准确类型
不知道内存被什么类型所识别,如opencv中的Mat类中的data成员,需要动态的决定它的类型。 - 程序需要在多个对象直接共享数据
某些类分配的资源具有与原对象相对独立的生存周期。例如假定我们希望定义一个名为Blob的类,保存一组元素。与大多数类不同,我们希望Blob对象的不同拷贝之间共享相同的元素。即,当我们拷贝一个Blob时,原Blob对象记其拷贝应该引用相同的底层元素。
这时在多个类之间,动态内存的释放就成了一个问题,因为它们共享同一个动态内存,如果多个对象中的一个被释放掉了,此对象不能释放共享的动态内存。
这时智能指针就能很好的运用了,它能够保证动态内存的准确释放。
智能指针的get方法
智能指针定义了get方法返回一个内置指针,指向智能指针管理的对象,此函数是为了这样一种情况而设计的:我们不需要向不能使用智能指针的代码传递一个内置指针。
但此使用get时应注意:使用get返回的指针的代码不能delete此指针,同时,也不能使用这个指针去初始化另一个智能指针(智能指针也可能会释放它)。
另外
智能指针的另外一个好处就是,使用它并不需要关系动态内存的释放。即不用显式释放动态内存。