template<class I>
class list_node {
public:
I val;
list_node(list_node<I>* p, list_node<I>* n, I value) :prev(p), next(n), val(value) {};
list_node(I value) :list_node(NULL, NULL, value) {};
list_node<I>* next;
list_node<I>* prev;
~list_node() { if (std::is_pointer<I>::value) { delete I; } }
};
我有一个这样的班。用户可以将指针类型作为“ I”参数传递,因此我必须动态删除创建对象。但是VS 2019显示错误“我无法删除不是指针的对象”。 请告诉我如何解决这个问题。我不会为该课程做专门研究(除非有其他解决方案)。
答案 0 :(得分:3)
这是一个很好的例子,其中智能指针很有用。
如果您还没有听说过std :: shared_ptr和std :: unique_ptr,现在是时候对其进行记录了,它们是安全管理内存的非常有用的工具。
答案 1 :(得分:0)
请勿删除类型为I
的变量。相反,假设I
将自行管理,否则,假设所有者(一个新消息)将为您清理。
就像std::vector
不会删除其中存储的指针一样,您的容器也不会删除。
我将删除该删除,并改用std::unique_ptr
:
{
list_node<std::unique_ptr<int>> my_node{new int{3}};
// ...
} // the new int is deleted here