4

私の目標は、作成されたすべてのインスタンスを静的メンバー コンテナーに追加するクラスを作成して、すべてのインスタンスに簡単にアクセスできるようにすることです。

コンテキストは、オブジェクトがGame.init()関数で作成され、コンテナーに追加されるゲームです。次にGame.update()Game.Draw()関数と関数がコンテナーを反復処理して、オブジェクトにアクセスして操作します。

オブジェクトをコンテナーに手動で追加またはコンテナーから削除する代わりに、コンストラクターとデコンストラクターでこれらのタスクを処理したいと考えています。

オブジェクト (このコードのボックス) がコピーまたは割り当てられると、ポインターが無効になり、問題が発生します。オブジェクト コンテナーへのポインターの代わりにオブジェクト コンテナーを使用すると、過剰なコピーが作成され、これを参照で機能させることができませんでした。これらの問題を回避するためにこのコードを改善する方法に関するいくつかのヒントを探しています (オブジェクトへのポインターコンテナーを使用する必要はありません。実際、ポインターの使用を避けたいと思いますが、これなしではこれを機能させることができませんでした)彼ら):

#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;
}
4

1 に答える 1