将任何指针传递给用于删除的函数
pass any pointer to a function for deleting
我想创建一个函数,它将接受一个指向类实例的指针作为参数,然后删除它。问题是我事先不知道它会删除什么。基本上我需要的是这样的东西:
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;
}
当然,这并不适用于所有情况。
。
相关文章:
- 删除功能不适用于串行通信后多个循环中的多个实例
- 动态分配列表 - 创建一个函数,用于删除所有包含偶数值的元素
- 文件模式标志"ios::app"是否用于删除文件(如果文件已存在)?
- 用于删除句点和空格的函数
- 阵列的临时存储如何用于C++中的删除恢复?
- 用于删除符号并生成排列的算法
- 适用于 std::unique_ptr 的内存高效自定义删除器?
- 用于删除复制/移动分配运算符的有效签名
- 用于删除一系列值的 STL 容器
- 如何在用于删除节点的函数中检查我的链表是否C++为空
- 动态分配数组中的运行时错误,用于删除 C++ 中的元素
- 不会用于删除对象的基类的析构函数应该是虚拟的吗?
- enable_if如何用于删除代码
- C++ 字符串,用于删除字符'b'并将字符'a'替换为两个'd'的构建函数
- C++中用于删除重复项的通用函数
- 用于删除链接列表的节点的伪代码
- 用于删除图像中的非文本区域的开源代码
- 为什么此代码不适用于删除链表中的节点?
- 用于删除指针的c++函函数似乎有效
- 将任何指针传递给用于删除的函数