Во-первых, std::unique_ptr
является class
не struct
, поэтому избавиться от приставки struct
на объявлении переменной pdfInfo
. Вы, вероятно, думал об этом вместо:
std::unique_ptr<struct Canvas::LoadedPDFInfo> pdfInfo;
Но даже при объявлении переменных (или типа литья) с использованием фактических struct
типов, вы все равно не нужен префикс struct
. C нуждается в этом, C++ - нет.
Во-вторых, ваша происходит выдаёт ошибку сегментации, потому что вы просто объявили переменную pdfInfo
, но на самом деле не указывает на действительный LoadedPDFInfo
объекта, поэтому с помощью оператора ->
не является законной операцией. Точно так же, как обычный указатель, std::unique_ptr
(и std::auto_ptr
и std::shared_ptr
) должны указать что-нибудь, чтобы получить доступ к что-то пользователей. Например:
std::unique_ptr<Canvas::LoadedPDFInfo> pdfInfo(new Canvas::LoadedPDFInfo);
C++ не является C не C++! – Olaf
@ Олаф, есть ли у вас ответ? – asad
Как бы я? Хрустальный шар туман, и я не ясновидящий. См. [Ask]. – Olaf