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

pass any pointer to a function for deleting

本文关键字:用于 删除 函数 任何 指针      更新时间:2023-10-16

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

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

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

注意:我有一个对象,基本上是一个循环,当它结束时,我需要创建另一个对象(不同的类),这也是一个循环,然后删除原来的。通过delete this,我不能开始想要的循环,所以我想我可以从第二个对象中删除它,但它可以从任何类型的对象开始,所以这是我唯一能想到的。还有什么建议吗?

这不可能。delete操作符使用数据的类型来推断要调用的析构函数。如果类型是void*,它就不能推导出任何有意义的东西。您可能需要查看智能指针主题

这是非常糟糕的,转换到void*并传递失去所有类型信息,您将以未定义的行为结束,而不是程序编译。

就按老办法调用delete。我不认为调用Foo(something)比调用delete something有什么优势。

智能指针,就像已经说过的那样。让智能指针代替你管理内存。试着实现你自己的智能指针(只针对你自己的教育目标)。在互联网上,你可以找到很多不同的想法和实现。

p。s .

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

你听起来像个十字军战士)))在c++中不只有黑与白。简单地说,有很多可能使用错误的东西。实际上,为了看起来优雅,有些东西确实需要使用void*来实现,你只需要在实现中对用户隐藏它们。

模板?

template<typename T>
void Foo<T>(T* p) {
  delete p;
}

您可以使用模板来实现这一点

template <class T>
void Foo(T* pointer){
//do your stuff
delete T;
}

当然,这并不适用于所有情况。