데이터 파일에서 텍스트 파일을로드 한 다음 동적으로 할당 된 객체를 만든 다음 포인터를 벡터에 저장하고 각 객체 유형에 따라 다른 두 컨테이너 중 하나에 저장합니다. 두 가지 질문이 있습니다. : 첫 번째 : 만약 내가 선언하고 파일을 읽은 함수 안에 개체를 초기화하고 벡터에 포인터를 추가하면, 내가 삭제할 때까지이 객체를 함수 밖에서 사용할 수있을 것인가? 해결책이 없다면? I 메모리 무료로 THIE 다음 함수를 사용합니다 : 두 번째 동적 할당 객체에 대한 포인터를 C++에서 삭제
for (int it = 0; it < phongItems.size(); it++) {
delete phongItems[it];
phongItems[it] = nullptr;
}
그래서 난 모든 객체를 포함하는 주요 컨테이너에서 개체를 삭제를, 내가해야 할 그 같은 포인터 여부를 다른 용기에 대한?
참고 : 나는 그 시점에서 매우 강하지 못하다. 그래서 오해가 있다면 그것을 깨끗이하고 덜 투표하기를 바란다.
편집 :
void Game::loadLevel(std::string file) {
initAssets(mgr, dataPath, file);
std::string line;
ifstream f(dataPath + file);
if (!f.is_open())
LOGE("game error while opening file %s", file.c_str());
while (getline(f, line)) {
std::vector<std::string> tokens;
sSplit(line, ' ', tokens);
if (tokens[0] == "MESH") {
std::vector<std::string> typeToken;
sSplit(tokens[2], '=', typeToken);
std::vector<std::string> nameToken;
sSplit(tokens[1], '=', nameToken);
std::vector<std::string> countToken;
sSplit(tokens[3], '=', countToken);
std::vector<std::string> matrixToken;
sSplit(tokens[4], '=', matrixToken);
int count = atoi(countToken[1].c_str());
//if I declare the pointer here and added it to the vector I can't use it later
StaticItem* item;
std::vector<GLfloat> mToken;
fSplit(matrixToken[1], ',', mToken);
item = new StaticItem(*engine, "/models/" + nameToken[1] + ".obj",nullptr,0);
item->narrow = true;
engine->addItem(item, true, true);
}
}
if (f.bad())
LOGE("game error while reading file %s", file.c_str());
f.close();
}
void Engine::addItem(EngineItem* item, bool collision, bool loader) {
if (collision)
collisionItems.push_back(item);
if (loader)
loadItems.push_back(item);
phongItems.push_back(item);
}
:
나는 각 줄은 나중에 사용하기 위해 벡터에 추가 할 항목을 작성해야합니다, 나는 그것의 선을 반복 다음과 같은 방법을 사용하여 텍스트 파일을로드 스마트 포인터 또는 원시 포인터를 사용하면 함수가 완료된 후 포인터가 범위를 벗어나게됩니다. 그래서 어떤 생각입니까?
'delete'는'new'로 한 번만 호출해야합니다. 스마트 포인터 나 적절한 컨테이너를 사용하면 자신이'new'를 사용하는 것을 피할 수 있습니다 (그래서'delete'도 없습니다). – Jarod42
@ Jarod42 클래스 멤버로 선언 할 때'shared_ptr'을 사용하고있었습니다 만, 이제는 텍스트 파일에서 객체를 만들어야 만 읽을 때까지 무엇이 들어 있는지 알 수 없으므로'shared_ptr '로드 함수 내부에서 컨테이너에 추가하십시오. 함수 범위가 끝나고 사용할 수 없게되고 오류가 발생합니다. –
로드 함수에서 소유권을 이전 할 수 있습니다. (코드가 없으면 오류를 정정하기가 어렵습니다.) – Jarod42