我想创建一个函数来接受指向类实例的指针作为参数,然后将其删除。问题是我事先不知道它将删除什么。基本上我需要的是这样的东西:
void Foo(pointer* generic_pointer){
//Some code here
delete generic_pointer;
//Some more code here
}
我想过使用void *,但这显然是非常糟糕的编码,导致混乱。
注意:我有一个基本上是循环的对象,当它结束时我需要创建另一个对象(不同类),这也是一个循环,然后删除原始对象。删除这个我无法启动所需的循环,所以我想我可以从第二个对象中删除它,但它可能是从任何类型的对象开始的,所以这是我唯一能想到的。关于如何做的任何其他建议?
答案 0 :(得分:2)
这是不可能的。 delete
运算符使用数据类型来推断要调用的析构函数。如果类型为void*
,则无法推断出任何合理的结果。您可能希望查看智能指针主题。
答案 1 :(得分:1)
这是非常糟糕的,转向void*
并传递掉所有类型信息,你最终会在undefinedbehaviorland中以比编译程序更快的速度结束。
只需按照老式的方式进行,然后致电delete
。我认为通过Foo(something)
致电delete something
会有好处。
答案 2 :(得分:0)
智能指针已经说过了。让智能指针管理内存而不是你。尝试实现自己的智能指针(仅限教育目标中的你)。在互联网上你可以找到很多不同的想法和实现。
P上。 S上。
我想过使用void *,但这显然是非常糟糕的编码,而且 导致混乱。
你听起来像一个十字军))) C ++中不仅有黑色和白色。只是有很多可能使用不正确的东西。实际上,为了看起来优雅,有些东西真的要使用void *实现,你应该在实现中将它们隐藏起来。
答案 3 :(得分:-1)
模板?
template<typename T>
void Foo<T>(T* p) {
delete p;
}
答案 4 :(得分:-1)
您可以使用模板来实现此目标
template <class T>
void Foo(T* pointer){
//do your stuff
delete T;
}
当然,这可能不适用于所有情况。
请参阅here。