new coral::PropertyManager
ヒープに新しい PropertyManager を割り当てますが、これは一時変数であるため、解放することはありません。これは Java の標準的なイディオムです。Java はガベージ コレクション言語であり、GC がこのダングリング リファレンスを解放してくれるからです。
何らかの理由でここを使用する場合new
、これを行う適切な方法は次のとおりです。
auto *pm = new coral::PropertyManager; // auto is C++11 syntax
m_propertyManager(pm);
delete pm; // when you're done using it
2番目のオプションはMgr
、関数が終了すると解放されるスタック上の自動変数として割り当てるという点で正しいです。Mgr のアドレスm_propertyManager(&Mgr);
を関数に渡します。これにより、Mgr オブジェクトを変更できるようになります (ただし、Mgr を参照として渡す方がよいでしょう)。
m_propertyManager が現在のスコープが終了した後も存続するオブジェクトであり、Mgr への参照をどこかに保存している場合、現在のスコープを終了して Mgr オブジェクトが破棄されると、m_propertyManager が無効なメモリへの参照を保持していることに注意してください。