2013-07-11 1 views
1

캡슐화하는 shared_array를 선언. 내가 올바른 생각하면, 스마트 포인터가 선언됩니다C++/부스트 : 나는 최근 스마트 포인터를 사용하기 시작

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

@ reset 당신은'reset()'메소드를 사용할 수 있습니다. 제 편집을보십시오. – juanchopanza

+0

정말 고맙습니다. 고마워요. – Vince

관련 문제