如何声明向量的unique_ptr?

End*_*der 0 c++ c++11

我正在尝试声明MyClassusing的全局向量unique_ptr。我的编译器是 4.8.4。

格洛.h

extern std::unique_ptr<std::vector<MyClass>> gl_vec;
Run Code Online (Sandbox Code Playgroud)

全局cpp

std::unique_ptr<std::vector<MyClass>> gl_vec;
Run Code Online (Sandbox Code Playgroud)

在我第一次在不同的 *.cpp 文件中初始化和使用它的文件中:

#include "glo.h"

// within function 
{
    gl_vec = std::unique_ptr<std::vector<MyClass>> ();

    cout << "gl_vec size = " << (*gl_vec).size() << endl; // crashes here
}
Run Code Online (Sandbox Code Playgroud)

当我使用指针时,事情一直在崩溃。有人看到我做错了什么吗?

tsa*_*ndy 5

除非您初始化或分配有效的指针值,否则 unique_ptr 的指针值为空。

gl_vec = std::unique_ptr<std::vector<MyClass>>(new std::vector<MyClass>());
Run Code Online (Sandbox Code Playgroud)


Ant*_*vin 5

您没有为底层分配内存vector

代替

gl_vec = std::unique_ptr<std::vector<MyClass>> ();
Run Code Online (Sandbox Code Playgroud)

做这个:

gl_vec = std::make_unique<std::vector<MyClass>>();
Run Code Online (Sandbox Code Playgroud)

或者如果 C++14 不可用

gl_vec.reset(new std::vector<MyClass>());
Run Code Online (Sandbox Code Playgroud)