将任何指针传递给要删除的函数

时间:2013-02-28 11:17:38

标签: c++ pointers

我想创建一个函数来接受指向类实例的指针作为参数,然后将其删除。问题是我事先不知道它将删除什么。基本上我需要的是这样的东西:

void Foo(pointer* generic_pointer){
  //Some code here
  delete generic_pointer;
  //Some more code here
}

我想过使用void *,但这显然是非常糟糕的编码,导致混乱。

注意:我有一个基本上是循环的对象,当它结束时我需要创建另一个对象(不同类),这也是一个循环,然后删除原始对象。删除这个我无法启动所需的循环,所以我想我可以从第二个对象中删除它,但它可能是从任何类型的对象开始的,所以这是我唯一能想到的。关于如何做的任何其他建议?

5 个答案:

答案 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