2013-07-29 1 views
1

new 키워드를 사용하지 않고 구현할 수있는 방법이 있습니까?새 키워드를 사용하지 않고도이 방법을 구현할 수 있습니까? C++

void World::generateChunk(Coordinate coord) { 
    if(loadedChunks[coord]) 
     delete loadedChunks[coord]; 
    loadedChunks[coord] = new Chunk(coord); 
    loadedChunks[coord]->generate(); 
} 

loadedChunks는 std::map<Coordinate, Chunk*>입니다.

+3

'loadedChunks'의 정의가 없으면이 질문에 답할 수 없습니다. –

+0

당신이 물어보기 바로 전에 나는 그것을 추가했습니다. : P @ DavidRodríguez-dribeas –

+1

'Chunk'가 복사 가능한지,'loadedChunks [coord] = Chunk (coord);'가 동작 할 수 있습니다. – Casey

답변

3

예, 사용하여 :

std::map<Coordinate, Chunk> 

세계 :: generateChunk을() 그들 될 것입니다 :

void World::generateChunk(Coordinate coord) 
{ 
    loadedChunks[coord] = Chunk(coord); 
    loadedChunks[coord].generate(); 
} 

이의 의미를 알고 있어야합니다. 기존 객체가 할당 된 이후 더 이상 소멸자 호출이 없습니다. 다형성이 더 이상 작동하지 않습니다 ( Chunk 서브 클래스를 loadedChunks에 저장할 수 없습니다.) 또한 적어도 loadedChunks.size() 개의 객체가 항상 존재합니다. 그들은 삭제할 수 없습니다.

Chunk도 복사 생성 가능, 할당 가능 등 표준 컨테이너 클래스의 기준을 충족해야합니다. 그런 작업이 올바르게 작동하는지 확인해야합니다 (예 : 전체 복사본 또는 얕은 복사본이 필요한지 여부를 결정해야 함). .)

+0

... 그리고 적절한 생성자를 작성함으로써 우리는 무서운'끔찍한'generate 메소드를 없앨 수 있습니다 (왜 그것은 끔찍한가? 왜냐하면 그것은 생성자의 작업을 수행하기 때문입니다!). 작은 오타 :'- '를'.'로 대체하십시오. –

+0

@KonradRudolph 반드시 모든 청크가 생성되는 것은 아닙니다. –

+0

@Binero지도가 참조 될 때만지도에 생성됩니다. – IdeaHat

관련 문제