2013-03-29 4 views
-1

나는 단지 몇 개의 정수를 포함하는 개체의 벡터 벡터를 가지고 있습니다.기본 - 값의 벡터 벡터에 shared_ptr

외부 벡터에는 수천 개에서 수십만 개의 Data 개체가 저장되는 수백 개의 벡터가 저장됩니다.

많은 shared_ptr이 포함 된 라이브러리를 사용하고 있으므로 사용하게 될 것입니다.

데이터를 힙에 저장하려면 어떻게 저장해야합니까?

std::vector<std::shared_ptr<std::vector<Data>>> 
std::vector<std::vector<std::shared_ptr<Data>>> 

이 처리하는 올바른 방법은 무엇입니까

?

+0

"단지 몇 개의 정수 만 포함하는"부분은 "수천에서 수십만 개의 Data 개체"로 조금씩 싸웁니 다. –

+0

각 '클래스 Data'객체는 4 차원의 정수를 포함합니다. 여러 시점에서 많은 데이터 인스턴스가 존재합니다. 거기에 뭔가가 있습니까? –

+0

오, 알았어, 알았다. 고마워요 :) –

답변

2

힙에 무언가를 저장하려면 new (C++) 또는 malloc (c)을 사용하십시오. 벡터 구현은 동적으로 크기가 조정 된 컨테이너이기 때문에 힙을 사용한다고 생각합니다. 따라서 실제로 elemenet이 힙에있는 요소를 벡터에 추가하는 경우에는 포인터가 아니라면 포인터가 힙에 있고 포인터가 가리키는 요소는 @Oswald가 가리키는 포인터가 아닙니다.

+0

벡터에 대한 shared_ptr은 래퍼 이외의 다른 것으로 불필요합니다. 그것은 매우 도움이됩니다. –

+0

벡터는 힙에 벡터 요소를 저장할지 여부를 결정할 때 포인터와 비 포인터를 구분하지 않지만 – Oswald

+0

이 참이지만 포인터는 스택이나 힙에 대한 포인터가 될 수 있으므로 벡터에 추가되면 포인터가 될 수 있습니다 힙에. @Oswald – spartacus

2

데이터를 힙에 저장하려면 어떻게 저장해야합니까?

또한 코드의 다른 부분에서 언급 된 값의 별칭으로 용기 내의 값이 필요하고, 변형이 코드의 일부에서 만들어진다면 참조 시멘틱스 즉, 필요하다면해야 저장이 std::vector항상 내가 할당, 출처에 대한 질문에 관한 것을 들어

std::vector<std::vector<std::shared_ptr<Data>>> 

: 수정 Data 객체에 대한 별명, 나는이 오른쪽 컨테이너 정의는 말을 잡고 다른 부분을 볼 수 ts 요소는 shared_ptr s, vector s 또는 Data s와 상관없이 연속적인 저장 영역에서 동적으로 생성됩니다.

그러나, 나는 당신이 정말로 참조 시멘틱스 필요하면 생각하는 당신을 추천하거나이 컨테이너 안에 값 유형 Data의 객체를 저장하는 데 충분하지 않은 경우 :

std::vector<std::vector<Data>> 

이 코드를 단순화하고 것 shared_ptr 메모리 및 런타임 오버 헤드도 제거 할 수 있습니다.

참조 의미론이 필요한지 여부는 응용 프로그램의 디자이너가 말할 수있는 것입니다. 귀하가 제공 한 정보만으로는 불확실 함없이 알려주지는 못하지만 희망적으로이 답변을 통해 자신에게 질문해야하는 종류의 질문에 대한 힌트와 각 경우에 대한 답변이 무엇인지에 대한 정보를 얻을 수 있습니다.

관련 문제