智能指针方便了内存的管理,那么怎么来管理一个数组呢?
有两种方式:shared_ptr和unique_ptr。
首先我们介绍一下两中方式的不同:
- shared_ptr不支持下标访问,成员访问只能通过get获取指针后再去访问成员
- shared_ptr定义的数组需要指定deleter,因为shared_ptr的默认deleter是删除管理的对象,但是,使用new[]进行分配内存时,需要用delete [] 而不是delete。
- unique_ptr可以直接使用下标访问,
需要注意的是shared_ptr在c++17已支持.
下面上代码:
shared_ptr
void ArrayDeleter(TestClass *array) {
delete [] array;
}
int main()
{
const size_t size = 100;
//使用函数指定
std::shared_ptr<TestClass []> spFunc(new TestClass[size], ArrayDeleter);
//使用lambda