かなりの数の異なるオブジェクトからアクセスされるオブジェクトへのスマート ポインターを使用したいと考えています。したがって、すべてのポインターが解放されるまで、それを破壊したくありません。スマート ポインターは、いくつかのオブジェクトをインスタンス化するオブジェクトなどを指すため、この 1 つのポインターを介してすべての個々の System object にアクセスできます。ただし、メインにスマートポインターを次のように作成するとしましょうstd::shared_ptr<System> object(new System);
次に、他のすべてのエンティティが派生する別のオブジェクトがあり、そこから静的 std::shared_ptr が設定され、上記のオブジェクトと等しく設定されているとします。static 宣言は、インスタンスごとではなく、コンパイラによって管理されることを意味します。したがって、基本クラスから派生するすべてのオブジェクトがこの静的ポインターを使用して System object にアクセスするとします。このスマート ポインターが破棄されるのはいつですか? このポインターは、メインのポインターの前に破壊する必要があります。破壊すると、参照カウントが0になり、それが指すオブジェクトが破壊されます。だから私の質問は、静的に宣言された std::shared_ptr が物事のスキームで破壊されるのはいつですか。あるいは、ポインタがグローバルに宣言され、どこでも使用されたとしても、このオブジェクトはいつ破棄されるのでしょうか?
基本クラスは次のようになります。
class Base
{
public:
static shared_ptr<System> m_System;
};
int main()
{
std::shared_ptr<System> system(new System);
Base::m_System = system;
/*
other stuff
*/
return 0;
}
また、誰かが私を助けることができるもう1つのこと、私はconst-nessがあまり得意ではありません。その静的ポインターを、派生クラスによって変更できない定数にしたいと考えています。しかし、それが const の場合、メインで行ったように初期化できませんよね? それで、constになるように宣言する方法はありますが、最初はこのようにポインターに等しく設定できます。