在初始化期间为unique_ptr指定结构大小

时间:2018-03-13 23:29:55

标签: c++ struct

我试图在C ++中使用unique_ptr指向一个结构。 struct的定义对于初始化程序是未知的。包含结构的头文件包含一个函数来检索结构的大小,结构是通过create(void* memory)调用构造和返回的,其中memory指向一个适当大小的数据块

使用下面的示例代码初始化此unique_ptr(修复此错误后将添加malloc成功检查),导致编译时错误:error: invalid application of ‘sizeof’ to incomplete type ‘OlmAccount’,因为代码无法访问结构定义。

是否可以为唯一指针指定结构的大小,以有效地“覆盖”该结构的sizeof并解决此错误?

导致此问题的示例:

std::unique_ptr<OlmAccount>(static_cast<OlmAccount *>(olm_account(malloc(olm_account_size()))));

编辑: 类似的问题与指定删除者有关并且由其来修复。但是,当此代码适用于使用shared_ptr(定义为使用不完整的删除器正确编译)时,会抛出相同类型的大小错误:

error: invalid application of ‘sizeof’ to incomplete type ‘OlmAccount’ static_assert( sizeof(_Yp) > 0, "incomplete type" );

1 个答案:

答案 0 :(得分:0)

Barmar和Daniel是正确的,必须删除。

由于默认的删除程序是调用sizeof的函数,因此提供自定义删除程序将删除sizeof依赖项。

Working Deleter