プロジェクトのコードの一部を最適化しようとしています。表示するコンテキストがいくつかあります。
Class Basic
{
type* _shareResource;
virtual Basic(){};
virtual ~Basic(){};
virtual void initialResource() = 0;
virtual void deleteResource() = 0;
virtual void ownmethod() = 0;
static Basic* createChild(int condition);
}
Basic* Basic::createChild(int condtion)
{
Basic* pointer;
if (condition == 1)
pointer = new ChildA();
else
pointer = new ChildB();
return pointer;
}
Class ChildA::public Basic
{
void initialResource(){ allocate memory for _shareResource;}
void deleteResource(){ delete _shareResource; _shareResource = NULL;}
ChildA(){ initialResource(); }
~ChildA(){ deleteResource(); }
virtual ownmethod() {// child A method}
}
Class ChildB::public ChildA
{
void initialResource(){ allocate memory for _shareResource;}
void deleteResource(){ delete _shareResource; _shareResource = NULL;}
ChildB(){ initialResource(); }
~ChildB(){ deleteResource(); }
virtual ownmethod(){// child B method}
}
したがって、クライアントとして Basic::createChild() を使用する場合: Basic* aPointer = CreateChild(1); // ある程度使用した後、クライアントはこのポンターを削除する必要があります delete aPointer;
ただし、RALL は、クライアントからの助けなしに基本的な削除自体を必要とします。だから私はコードを変更しようとしています。私がしたことは次のとおりです。
boost::share_ptr<Basic> Basic::createChild(int condtion)
{
boost::share_ptr<Basic> pointer;
if (condition == 1)
pointer = boost::share_ptr<ChildA>(new ChildA());
else
pointer = boost::share_ptr<ChildA>(new ChildB());
return pointer
}
しかし、メモリリークとしてコアダンプを取得したため、子クラスの deleteResource() から確認しましたが、原因がわかりません。
コア ダンプについて説明したり、RALL の原則に従うためのより良い解決策を提供したりできますか? どうもありがとう。(私の最適化ではあまり多くのクライアント コードを変更しないようにするため、createChild を静的メソッドとして保持することを好みます)