说我在公共标题中有这样的东西:
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指针背后的想法是我不必在公共头文件中包含内部类的定义。
我的问题是:我是否以安全的方式处理空指针?删除有什么问题吗?
谢谢!
答案 0 :(得分:7)
只要您将其重新投入原始类型,它就是安全的。
但你不需要这样做。只需在公共标题中向前声明你的内部类型,你就不需要做这个讨厌的演员了。
class YourClass {
...
private:
class Internal;
Internal *pInternal;
};
答案 1 :(得分:3)
您不需要在公共标头中包含该类的定义。即。
class SomeInternalClass ;
class MyClass
{
public:
MyClass();
protected:
virtual ~MyClass();
private:
SomeInternalClass *pSomeInternalClass;
}