Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 通过unique_ptr访问结构成员会导致分段错误_C++_C++11_Unique Ptr - Fatal编程技术网

C++ 通过unique_ptr访问结构成员会导致分段错误

C++ 通过unique_ptr访问结构成员会导致分段错误,c++,c++11,unique-ptr,C++,C++11,Unique Ptr,这就是我设置指向struct的指针的方式。在运行时,在第二行抛出分段错误。LoadedPDFInfo是画布命名空间中的结构 struct std::unique_ptr<Canvas::LoadedPDFInfo> pdfInfo; pdfInfo->handle = ++currentPDFHandle; pdfInfo->totalPageNum = FPDF_GetPageCount(doc); 首先,std::unique_ptr是一个类而不是一个结构,所以去掉

这就是我设置指向struct的指针的方式。在运行时,在第二行抛出分段错误。LoadedPDFInfo是画布命名空间中的结构

struct std::unique_ptr<Canvas::LoadedPDFInfo> pdfInfo;
pdfInfo->handle = ++currentPDFHandle;
pdfInfo->totalPageNum = FPDF_GetPageCount(doc);
首先,std::unique_ptr是一个类而不是一个结构,所以去掉pdfInfo变量声明中的结构前缀。你可能在想这个:

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

C++不是C不是C++!奥拉夫你有答案吗?我怎么回答?水晶球是模糊的,我不是透视者。瞧,奥拉夫,里面有什么雾?让我知道,这样我就可以减少misty@chema989:std::unique_ptr仅在C++11及更高版本中可用。另一个选项是auto-pdfInfo=std::make_unique;,在C++14中添加了类型名twicestd::make_unique,这减少了代码重复,但目前尚未广泛使用。不过,您可以在C++11中编写一个等效函数。此外,std::make_unique的真正目的更多的是为了更好的内存管理,而不是更好的代码可读性。另外,直接调用std::unique_ptr构造函数有一个好处-您可以决定对象指针的来源,而不必在构造函数中直接调用new,例如:std::unique_ptr pdfInfo GetLoadedPDFInfoPointer;,虽然在这种情况下,您可能应该改用std::shared_ptr。make_unique没有比new更好的内存管理。在没有序列点的情况下有多个分配的情况下,它具有更好的异常安全性。
std::unique_ptr<Canvas::LoadedPDFInfo> pdfInfo(new Canvas::LoadedPDFInfo);