独自のスマート ポインターを実装しましたが、実装に致命的な欠陥があることに気付くまで、すべてが正常に機能していました。問題は、オブジェクトがそれ自体への参照を潜在的に保持するスマート ポインターを持つことができるという事実でした。これが1つのレイヤーの問題である場合、問題は簡単に回避できます-簡単に発生する可能性があるのは、参照カウントされたクラスが間接的に(そのメンバーの1つを介して)それ自体への参照を保持することです。これは、オブジェクトが決して削除されないことを意味します。これを解決できる方法/方法はありますか?
最も簡単な例:
class Derived : public Object {
public:
static ref<Object> Create() { return ref<Object>(new Derived()); }
private:
Derived() : m_ref(this) // m_ref now holds a reference to Derived instance
{
// SOME CODE HERE
}
ref<Object> m_ref;
};
オブジェクトは参照カウンターを含む基本クラスであり、ref は割り当てられたオブジェクトへの参照を保持するスマート ポインターです。