通过 unique_ptr 访问结构成员给出分段错误

Accessing struct member through unique_ptr gives segmentation fault

这就是我将指针设置为结构的方式。在运行时,分段错误会在第二行抛出。 LoadedPDFInfo 是 Canvas 命名空间

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

首先,std::unique_ptrclass 而不是 struct,因此去掉 pdfInfo 变量声明中的 struct 前缀。您可能正在考虑这个:

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

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

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

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