지금 SDL로 횡스크롤 게임을 하나 만들고있는데
맵툴로 txt파일에 저장한 맵 데이터를 게임초기화할때 불러오려고 하거든
그래서 LoadMap이라는 클래스를 만들어서
이 클래스 안에서 txt파일의 정보를 가져오고 (맵 데이터가 얼마나 들어올지 모르니 동적할당으로 읽어들인 크기만큼 배열생성함)
그걸 이제 게임초기화할때 LoadMap클래스에 저장된 정보를 가져와서 맵을 생성하는데...
여기서 문제가 뭐냐하면
게임초기화를 할때 예를들어
클래스 게임스테이지1{
LoadMap *맵도우미;
....
....
};
게임스테이지1 :: 게임초기화()
{
맵도우미= new LoadMap(); //LoadMap 클래스 동적할당으로 생성
맵도우미 -> 맵정보로드(); // 맵정보 로드
맵정보 = 맵도우미 -> GetMapData(); //맵정보 받아옴
맵생성(맵정보); //맵생성
delete 맵도우미; //LoadMap 클래스 삭제
}
이런식으로 하면 전혀 문제가 없지만
클래스 게임스테이지1{
LoadMap 맵도우미; //LoadMap 클래스 정적할당으로 생성
....
....
};
게임스테이지1 :: 게임초기화()
{
맵도우미. 맵정보로드();
맵정보 = 맵도우미.GetMapData(); //맵정보 받아옴
맵생성(맵정보); //맵생성
}
이런식으로 LoadMap클래스를 정적으로 생성하게되면
게임이 종료될때까지 LoadMap클래스가 살아있어서 불필요하게 메모리를 잡아먹잖아?
그래서 나는 LoadMap클래스를 첫번째 방법으로만 사용할 수 있도록 클래스 사용자에게 강요하고 싶은데
혹시 이런 방법이 있나해서 물어보는거야
물론 1. 두번째 방법으로 사용 사용을 안하면되고
2. 클래스에 주석도 친절하게 달아주고
3. LoadMap클래스를 정적할당할때에 게임초기화() 라는 함수안에서 지역변수로 하면 문제가 전혀없지만...
혹시나 내가 만든 클래스를 비효율적으로 사용하려는 잠정적 변태 사용자들을 막고싶어서그래...
한줄요약 : C++에서 객체생성을 무조건 동적으로만 할당하게 사용자한태 강요하고싶어요 어떤방법이 있을까요??
해제 안해주면 똑같은거 아닌가...
걍 게임초기화함수에 지역변수로 두면되는거 아닌가효
생성자를 막아브러
싱글톤ㅡㅡ
지금 나같은경우에는 굳이 상관없긴한데 언젠가 강요해야만 하는 경우도 있을꺼같아서..
그리고 스마트 포인터. 힌트는 다줌
싱글톤으로하면 결국 프로그램 종료될때까지 살아있잖아
오 스마트 포인터 뭐지 ㄳ 찾아볼게
스마트포인털이랑 동적할당을 강요랑 뭔상관
객체에 정적할당은 없어.. 선언도 결국 생성자 호출하는 생성 루틴 타거든.. 결론은 사용자가 delete하지 않아도 쓰지 않으면 자동 소멸하는 메커니즘을 만들어야하는데 그게 저거.
스마트포인털은 메모리누수를 방지하는거지 동적할당을 강요하는게 아니랑께
스마트포인터 찾아봤는데 여기 올라온문제랑은 좀 다르지만 그래도 재밌는내용이네
문제에 요지는 생성하고 delete하지 않는 변태같은 놈이 있어도 잘돌아가는 게임을 맹글면 되잖아? 문제 해결 방법은 여러가지지
ㅇㅇ 잘 사용하면 굳이 저런 설계 안해도 문제 해결 충분히 될꺼야
땡큐 원한변태는 아니었지만 메모리누수 변태에대해서는 해결됬다
사용 안하면 오류 터지게해주면 알아서 그렇게 쓰게 됨 ^^