c++ - 删除从 C++ 中的 void 强制转换的指针是否安全?

标签 c++ pointers

假设我在公共(public) header 中有类似的内容:

class MyClass
{
public:
    MyClass();

protected:
    virtual ~MyClass();

private:
    void *pSomeInternalClass;
}

这是我的实现:

MyClass::MyClass()
{
    pSomeInteralClass = (void *) new SomeInternalClass();
}

MyClass::~MyClass()
{
    SomeInternalClass *pTemp = (SomeInternalClass *) pSomeInternalClass;
    delete pTemp;
    pSomeInternalClass = NULL;
}

void 指针背后的想法是我不必在公共(public) header 中包含内部类的定义。

我的问题是:我是否以安全的方式处理 void 指针?删除有什么问题吗?

谢谢!

最佳答案

只要将其转换回其原始类型,它就是安全的。

但是您不需要那样做。只需在您的公共(public) header 中转发声明您的内部类型,您不需要执行这种讨厌的转换。

class YourClass {
  ...
  private:
    class Internal;
    Internal *pInternal;
};

关于c++ - 删除从 C++ 中的 void 强制转换的指针是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9157164/

相关文章:

c# - 如何使用 SWIG 生成的接口(interface)在 C# 中正确向下转换?

cJSON内存泄漏

c - 这些堆栈和堆内存地址有什么区别?

c++ - 无法将 char (*)[1000] 转换为 char **

c++ - SWIG 和 C++ 构造函数

c++ - 对模板类成员的 undefined reference

c++ - 取消引用 std::shared_ptr<T[]>?

c++ - 在c++中命名文件

c - malloc的使用和free : invalid next size error

c++ - 使用 shared_ptr 避免循环包含