내 previous question의 속편으로 다음 코드에서 내가 뭘 잘못하고 있는지 물어보고 싶습니다.새로운 사용/삭제의 올바른 사용
코드는 예를
void myclass1::myfun()
{
myclass2* newVar = new myclass2();
/* other code and stuff */
myvector.push_back(newVar); // myvector is a member of myclass1 and is a std::vector<myclass2*>
delete newVar;
}
에 대한,하지만 난 그것을 실행할 때 나는 delete
줄을 주석으로하지 않는 한, myvector는 빈 반환합니다.
내가 뭘 잘못하고 있니?
오, 맞았습니다. 감사. 삭제 선을 제거하면 벡터가 삭제되면 어떻게됩니까? 포인터 만 삭제됩니까? 감사합니다 – Federico
@Federico : 맞습니다. pointee가 아닌 포인터 만 삭제됩니다. 그 포인터를 "스마트 포인터"로 감싸는 것이 아니라면, 당신을 위해'delete'를 처리해야합니다. – ereOn
@ereOn : understand. 문제는 내가 벡터를 포인터 중 하나의 벡터에서 변경할 수 없다는 것입니다 (변경 하기엔 너무 많은 코드, 너무 많거나 너무 커서 모든 개체가 .push_back에 다시 할당되면 응용 프로그램이 느려질 수 있습니다.)). 벡터를 삭제할 때 어떻게 지적자를 삭제할 수 있습니까? 이 "스마트 포인터"는 무엇입니까? 그 (것)들은 buit-in이고 또는 나는 그 (것)들을 정의해야 하는가? 다시 한번 감사합니다. – Federico