저의 목표는 생성 된 모든 인스턴스를 정적 멤버 컨테이너에 추가하여 모든 인스턴스에 쉽게 액세스 할 수 있도록하는 클래스를 만드는 것입니다.해당 클래스의 모든 인스턴스를 포함하는 정적 멤버 컨테이너가있는 클래스 만들기?
컨텍스트는 객체가 Game.init()
함수로 생성 된 다음 컨테이너에 추가되는 게임입니다. 그런 다음 Game.update()
및 Game.Draw()
함수는 컨테이너를 반복하여 객체에 액세스하고 조작합니다.
수동으로 컨테이너에 /에서 개체를 추가하거나 제거하는 대신 이러한 작업을 처리하기 위해 생성자와 deconstructor를 사용하고 싶습니다.
개체 (이 코드의 상자)가 복사 또는 할당되면 문제가되는 포인터가 유효하지 않게됩니다. 개체 컨테이너에 대한 포인터 대신 개체 컨테이너를 사용하면 과도한 복사본이 만들어졌으며 참조로이 작업을 수행 할 수 없었습니다. 이러한 문제를 피하기 위해이 코드를 향상시키는 방법에 대한 팁을 찾고 있는데 포인터를 사용하지 않는 것이 좋지만 실제로이 작업을 수행하지는 않았다. 그들) :
#include <list>
#include <iostream>
class Box
{
private:
std::list <Box*>::iterator iter;
public:
static std::list <Box*> List;
Box() {
List.push_front(this);
iter = List.begin();
std::cout << "Constructing box." << std::endl;
}
~Box() {
std::cout << "Trashing box." << std::endl;
List.erase(iter);
}
void lookInside() {
std::cout << "It's empty." << std::endl;
};
};
std::list <Box*> Box::List;
int main()
{
Box Box_1;
Box Box_2;
Box Box_3;
Box_1 = Box_2; // causes problems!
for (auto iter : Box::List) {
iter->lookInside();
}
std::cout << "The list contains " << Box::List.size() << " boxes." << std::endl;
return 0;
}
문제가 발생하지 않아야합니다. 너는 여전히 상자가 3 개있다. 방금 Box_2를 Box_1에 할당하는 것입니다. –
코드가 작동하지만 종료 할 때 충돌이 발생합니다. –
아하, 문제는 iter 회원입니다. –