2015-07-11 2 views
0

В классе, обозначающем синий цвет, я определяю указатель на FJsonValue.Как создать указатели Unreal Engine 4?

private: 
    TSharedPtr<FJsonValue, ESPMode::ThreadSafe> JsonValue; 

После вызова метода, который выделяет память, я получил нулевой объект ...

void UDictValue::SetInt(float value) 
{ 
    ValueType = EDictValueType::VT_INT; 
    JsonValue = MakeShareable(new FJsonValueNumber(value)); 
    GEngine->AddOnScreenDebugMessage(-1, 15.0f, FColor::Red, "test"); 
} 

MakeShareable фактически выделяет новую память. Отладчик говорит об адресе, где это было выделено ... Но после возврата из функции указатель сразу падает (JsonValue = NULL)

Что-то не так? Это GC? Но мне нужен этот указатель после вызова этого метода.

ответ

0

Вы создаете объект внутри функции и используете MakeShareable, чтобы присвоить его TSharedPtr. Как только функция выходит из области видимости, созданный объект уничтожается, обнуляя TSharedPtr. Чтобы заставить его оставаться постоянным, вам придется создать объект вне функции, а затем указать на нем TSharedPointer.

Возможно, вам стоит просто инициализировать его на уровне объекта, а затем просто изменить значение с помощью своей функции, а не пытаться создать его внутри функции.

MakeShareable просто позволяет явно конвертировать из указателя стиля C++ в TSharedPtr, который фактически не изменяет поведение TSharedPtr.

Смежные вопросы