2013-07-11 37 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