通过unique_ptr访问struct成员会产生分段错误

时间:2016-06-21 02:32:00

标签: c++ c++11 unique-ptr

这就是我如何设置指向struct的指针。在运行时分段错误在第二行引发。 LoadedPDFInfo是Canvas名称空间

中的结构
struct std::unique_ptr<Canvas::LoadedPDFInfo> pdfInfo;
pdfInfo->handle = ++currentPDFHandle;
pdfInfo->totalPageNum = FPDF_GetPageCount(doc);

1 个答案:

答案 0 :(得分:3)

首先,std::unique_ptrclass而不是struct,因此请删除struct变量声明中的pdfInfo前缀。你可能正在考虑这个问题:

std::unique_ptr<struct Canvas::LoadedPDFInfo> pdfInfo;

但即使使用实际struct类型声明变量(或类型转换),您仍然不需要struct前缀。 C需要,C ++没有。

其次,您的段错误正在发生,因为您只是声明了pdfInfo变量,但它实际上并没有指向有效的LoadedPDFInfo对象,因此使用->运算符不是有效的操作。就像常规指针一样,std::unique_ptr(以及std::auto_ptrstd::shared_ptr)必须指向某些内容才能访问某些内容&#39; s 成员。例如:

std::unique_ptr<Canvas::LoadedPDFInfo> pdfInfo(new Canvas::LoadedPDFInfo);