簡體   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