【发布时间】:2019-06-13 01:06:15
【问题描述】:
我有一个头文件,出于复杂性和“保密”的原因,它需要隐藏一些内部结构。因此,我在 oublic 标头中声明了一个原始 void 指针,在代码内部有静态转换将原始指针转换为它的实际类型。
现在由于一般内存管理更改,我需要在内部将类型更改为 unique_ptr(它现在作为 unique_ptr 来自对象工厂,以前是原始指针)。
所以在我的标题中我有这个:
class SomeClass {
private:
void *_hiddenTypeInstance;
}
是否可以将此 _hiddenTypeInstance 静态转换为内部已知的 unique_ptr 类型?
【问题讨论】:
-
它本身是
unique_ptr吗?还是它指向unique_ptr? -
可以将
unique_ptr<Foo *>转换为void *并再次返回,如果这就是您的要求 -
也许看看“pimpl idiom”
-
一般来说,如果你可以声明一个空的基类并使用指向它的指针作为你的“秘密”而不是空指针会更好。您还可以声明类型的名称而不定义其内容。这两者都确保数据的内容保持合理的机密性,但允许调用者编写比使用 void* 更不容易出错的代码。如果他们有多个 void* 对象,您如何确定他们已将您的对象还给您?