说我有类似的东西在公共标题:是否可以安全地删除从C++中的void被抛出的指针?
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指针背后的想法是,我dont't必须包括公共标题中内部类的定义。
我的问题是:我是否以安全的方式处理void指针?删除有问题吗?
谢谢!
Afaik,不需要回到原始类型。只有地址用于查找内存中的相应块。 – msteiger 2012-02-06 08:11:36
更好的想法是在MyClass的private:部分中声明该类,而不是将其与MyClass相同的级别暴露给头的客户端。 – 2012-02-06 08:13:07
不,你需要将其转换为原始类型(虚拟析构函数放松一点)。 'A * a = new A(); B * b =(B *)(void *)a;删除b;'将调用'B ::〜B',而不是'A ::〜A',@ user198397 – Mat 2012-02-06 08:14:03