坚持理解shared_ptr的初始化方式

时间:2018-01-24 07:18:01

标签: c++ shared-ptr smart-pointers

一个类定义如下:

#include<memory>
using namespace std;
class A
{
public:
    A(int n) : data{new int[n],default_delete<int[]>()}{}
    shared_ptr<int> data;
};

那么如何理解data{new int[n],default_delete<int[]>()}。初始化方式data{}对我来说很奇怪,因为我不熟悉C ++ 11。据我所知,这种方式是否意味着让data首先指向连续的堆内存,然后定义将此内存释放为delete int[]而不是delete int的方式?

1 个答案:

答案 0 :(得分:4)

您只需使用一个std::shared_ptr's构造函数(请参阅here):

template< class Y, class Deleter > 
shared_ptr( Y* ptr, Deleter d );

default_delete对数组有专门性(参见here)。