これが私のシナリオです (簡潔にするために、アクセス許可とインスタンス変数を取り出し、関連するメソッドのみを取り出しました):
template <typename ItemType>
class LinkedList
{
class Item
{
Item(ItemType theObj, bool freeObj);
~Item();
};
void add(LinkedList<ItemType>::Item item);
};
template <typename ItemType>
LinkedList<ItemType>::Item::~Item()
{
if(freeObj) {
delete obj;
}
}
私のコードでは、次のように使用しました。
// works great
LinkedList<MyObject*> mylist;
mylist.add(LinkedList<MyObject*>::Item(new MyObject(), false));
// won't compile because you cannot use delete operator on a non-pointer
LinkedList<MyObject> mylist;
mylist.add(LinkedList<MyObject>::Item(MyObject(), false));
LinkedList<>::Item が実際のオブジェクトを解放してはならないという事実は脇に置いておきます。これは、テンプレートを理解するための質問です。ItemType がポインターである場合とそうでない場合に、Item デストラクタが処理する明示的なテンプレートを指定する必要があります。
これは可能ですか?潜在的な設計/漏れ穴の落下は何ですか? ありがとう。