2012-03-08 3 views
1

이것은 어리석은 질문이지만 이것을 수행하는 방법을 모릅니다.C++에서 포인터를 어떻게 이동합니까?

나는 개체와 벡터를 가지고있다. 실행 중 설정된 시간에이 객체를 벡터에 넣고이 객체를 새 객체로 덮어 써야합니다. 나는 현재 이것을 갖고있다.

std::vector<Cube*> cubes; 
Cube* workingCube = new Cube(); 
... 
cubes.insert(cubes.begin(), workingCube); 
workingCube = new Cube(); 

나는 포인터와 관련된 이유로 인해 틀렸다. 나는 이것을 제대로하는 방법을 알 수 없다.

std::vector<Cube> cubes; 

Cube workingCube; 
cubes.insert(cubes.begin(), workingCube); 
workingCube = Cube(); 

경우 Cube 당신 수있는 용기에 std::move(workingCube) 대신, 이동 복사 비싸지 만 싼 : 우리는 포인터 및 명시 적 동적 할당을 피할 경우

+0

새로운 배치를 사용할 수 있지만 이는 잘못된 설계입니다. 어쩌면 똑똑한 포인터가 근본적인 문제를 해결할 수 있습니다. – BatchyX

+0

@CarlNorum 내 파트의 오타가있는 부분이 수정되었습니다. – Valyrion

+0

@BatchyX : 새로운 배치가 어떻게 문제와 관련되는지 확인하지 못했습니다. –

답변

10

이 많은 청소기와 훨씬 적은 누수가 발생하기 쉬운입니다. Cube이 이동 및 복사 비용이 많은 경우 std::unique_ptr<Cube>을 사용하여 컨테이너로 옮깁니다.

을 소유하기 위해 원시 포인터를 사용하지 마십시오.

1

개체가 "소유하고있는"포인터, 즉 누가 더 이상 필요하지 않은 개체가 누가 delete에 책임이 있는지를 항상 기억하는 한 아무 문제가 없습니다. 귀하의 경우, 소유 포인터를 벡터로 전송하고 어떤 시점에서 벡터의 모든 포인터를 삭제해야합니다.

관련 문제