删除在C++中从void转换的指针是否安全?

Alb*_*ore 2 c++ pointers

说我在公共标题中有这样的东西:

class MyClass
{
public:
    MyClass();

protected:
    virtual ~MyClass();

private:
    void *pSomeInternalClass;
}
Run Code Online (Sandbox Code Playgroud)

这是我的实施:

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

MyClass::~MyClass()
{
    SomeInternalClass *pTemp = (SomeInternalClass *) pSomeInternalClass;
    delete pTemp;
    pSomeInternalClass = NULL;
}
Run Code Online (Sandbox Code Playgroud)

void指针背后的想法是我不必在公共头文件中包含内部类的定义.

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

谢谢!

Mat*_*Mat 7

只要你把它重新投入原始类型,它就是安全的.

但你不需要这样做.只需在公共标题中向前声明你的内部类型,你就不需要做这个讨厌的演员.

class YourClass {
  ...
  private:
    class Internal;
    Internal *pInternal;
};
Run Code Online (Sandbox Code Playgroud)

  • 不,你需要转换为原始类型(虚拟析构函数放松了一点).`A*a = new A(); B*b =(B*)(void*)a; 删除b;`将调用`B ::〜B`,而不是`A ::〜A`,@ user198397 (2认同)