2013-07-11 38 views
1

我最近开始使用智能指针。 如果我是正确的,智能指针声明:C++/boost:声明封装的shared_array

shared_array<double> a(new double[n]); 

但是我们该怎么做,如果被封装在一个类? 我在做如下的时刻,但似乎超级难看:

头文件:

class Foo { 
public: 
    Foo(int size); 
    shared_array<double> _a; 
}; 

源文件

Foo::Foo(int n){ 
    shared_array<double> p (new double[n]); 
    _a = p; 
} 
+0

首先,退一步想想事情。一个shared_array是有意义的,如果它将拥有共享所有权,那么这个类成员很少应该这样做。 –

+0

@JerryCoffin:如果类有一个返回此共享数组的get方法,该怎么办? – Vince

回答

2

您可以使用构造函数初始化列表:

Foo::Foo(int n) : _a(new double[n]) {} 

如果您需要在构造函数的主体中设置托管数组,那么

Foo::Foo() 
{ 
    int n = someCalculation(); 
    _a.reset(new double[n]); 
} 
+0

谢谢!但有没有更通用的方法?这里的大小很好地作为构造函数的参数给出,但如果构造函数需要做一些计算来查找大小呢?在这种情况下,使用初始化列表听起来不像是要走的路。 – Vince

+0

@Vince你可以使用'reset()'方法,看我的编辑。 – juanchopanza

+0

太棒了,谢谢 – Vince