似乎无法将 unique_ptr 分配给结构

Cannot seem to assign a unique_ptr to a struct

我在 class 上有一个指向结构的 unique_ptr 成员。

class ExampleClass {
    std::unique_ptr<StateStruct> _character_state;
}

我不明白如何为结构获取内存并设置 unique_ptr。

在我的构造函数中我有:

ExampleClass::ExampleClass {
    std::unique_ptr<StateStruct> _character_state(static_cast<StateStruct*>(malloc(sizeof(StateStruct))));
    _character_state->state_member_int_value = 4 // _character_state is empty
}

我做错了什么?

ExampleClass::ExampleClass() : _character_state( new StateStruct() ) {

}

...或者如果您想稍后转移所有权(您也可以在构造函数中执行此操作,但不会清楚地传达您正在尝试做的事情)

_character_state.reset( new StateStruct() );

...或者为了完整起见,如果您喜欢打字

,您可以为您的变量分配一个新的unique_ptr
_character_state = std::unique_ptr<someObject>(new someObject());

好吧,不要使用 malloc。

std::unique_ptr<StateStruct> _character_state(static_cast<StateStruct*>(malloc(sizeof(StateStruct))));
                                                                        ^^^^^^

unique_ptr 通过调用 delete 释放内存(不是释放)。

您还在构造函数中创建了一个局部变量(不是初始化成员变量)。更喜欢在初始化列表中而不是在构造函数的主体中初始化成员变量。

ExampleClass::ExampleClass {
    _character_state(new StateStruct)
{
    // Should you not move this to the constructor
    // if StateStruct
    _character_state->state_member_int_value = 4
}

What am I doing wrong?

首先你的语法是错误的,你缺少括号。其次,在您的构造函数中,您正在创建局部变量 _character_state ,它将隐藏成员变量并使其保持未初始化状态。所以正确的语法是:

ExampleClass::ExampleClass() :
    _character_state( std::make_unique<StateStruct>() )
{
    _character_state->state_member_int_value = 4 // _character_state is empty
}

如果您出于任何原因必须使用 malloc() 创建 StateStruct,您将需要提供自定义删除器,调用 free().

如果您真的不需要 malloc(),您可能应该在 StateStruct 自己的构造函数中初始化 state_member_int_value