繁体   English   中英

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

[英]Is it safe to delete a pointer that was cast from void in C++?

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

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指针背后的想法是我不必在公共头文件中包含内部类的定义。

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

谢谢!

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

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

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

您不需要在公共标头中包含该类的定义。

class SomeInternalClass ;
class MyClass 
{ 
public: 
    MyClass(); 

protected: 
    virtual ~MyClass(); 

private: 
    SomeInternalClass *pSomeInternalClass; 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM