2012-06-07 2 views
-1

커서 객체 포인터 벡터가 있다고 가정합니다. 커서 객체는 단일 int 매개 변수로 구성됩니다. 그럼이 문법이 작동할까요?매개 변수로 동적 할당, 말하자면?

vector<cursor*> cursors; 
cursors.push_back(new cursor(4)); 

또는 내가로 어떻게해야합니까 :

cursor* tempCursor = new cursor(4); 
cursors.push_back(tempCursor); 
+0

예, 정상적으로 작동합니다. –

+0

시도해 보셨습니까? – mfontanini

+6

귀하의 질문에 분명히 시도하지 않은 것으로 나타났습니다. –

답변

1

당신이 주장하는대로이 작업을 수행하고 나중에 그것을 청소하지 않으면 당신은 메모리 누수가됩니다.

더 나은 방법은 shared_ptr을 사용하는 것입니다.

코드는 정확히 이해하기 조금 어려운이

cursors.push_back(std::make_shared<cursor>(4)); 

과 같을 것이다 당신이 생각 달성하기 위해 노력하고 무엇을. 사실에도 불구하고

cursors.push_back(std::unique_ptr<cursor>(new cursor(4))); 
+0

아니요, 더 좋은 방법은'unique_ptr'을 사용하는 것입니다. 'shared_ptr'는 절대적으로 필요한 경우에만 사용해야합니다. –

+0

unique_ptr은 객체의 소유자를 하나만 갖고 싶을 때 사용해야합니다.이 경우 원하는 내용이 명확하지 않으므로 shared_ptr입니다. –

+0

공유 소유권은 고유 한 소유권이 아니라 구석의 경우입니다. –

1

: 명시 적으로 객체를 다른 곳에 공유하지 않으려면

@ 고양이 - 플러스 - 플러스에 의해 코멘트에 아래에 언급 한 바와 같이

는 unique_ptr 코드는 다음과 같을 것이다 사용해야합니다 이것을 시도하지 않았을 수도 있습니다 :

새 커서 객체를 만들면 새로운 커서 객체를 반환합니다. push_back 함수를 사용하면 객체를 벡터에 다시 푸시 (push)합니다. 따라서 push_back 내부에 새로운 객체를 만들면 새로운 커서를 반환하는 함수를 평가하고 다시 밀어 넣습니다.

기본적으로 반환 값과 평가에 관한 내용입니다.

0

그래도 효과가 있지만 다른 것을하는 것이 더 낫다는 가능성은 매우 큽니다. 그렇지 않으면 정말 좋은 이유가 없기 때문에 커서의 포인터 대신 커서의 벡터로 만드는 것을 고려할 것입니다. 이것은 일반적으로 메모리 관리를 자동화하여 프로그래머의 효율을 개선하고, 간접의 불필요한 단계를 제거하여 코드 효율성을 향상

std::vector<cursor> cursors; 

cursors.push_back(4); // or cursors.emplace_back(4); 

:이 경우처럼 뭔가를 할 수 있습니다.