这是我的场景(为简洁起见,我取出了权限和实例变量,只取出了相关方法):
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 不应该释放实际对象的事实。这更像是一个理解模板的问题。我需要为 Item 析构函数指定一个显式模板,以便在 ItemType 是指针和不是指针时进行处理。
这可能吗?有哪些潜在的设计/漏坑坠落?谢谢。