我正在尝试使用MyClass
声明unique_ptr
的全局向量。我的编译器是4.8.4。
glo.h
extern std::unique_ptr<std::vector<MyClass>> gl_vec;
glo.cpp
std::unique_ptr<std::vector<MyClass>> gl_vec;
在我初始化的文件中,第一次在另一个* .cpp文件中使用它:
#include "glo.h"
// within function
{
gl_vec = std::unique_ptr<std::vector<MyClass>> ();
cout << "gl_vec size = " << (*gl_vec).size() << endl; // crashes here
}
当我使用指针时,事情一直在崩溃。有人看到我做错了吗?
答案 0 :(得分:3)
除非您初始化或指定有效的指针值,否则unique_ptr的指针值为null。
gl_vec = std::unique_ptr<std::vector<MyClass>>(new std::vector<MyClass>());
答案 1 :(得分:2)
您没有为基础vector
分配内存。
而不是
gl_vec = std::unique_ptr<std::vector<MyClass>> ();
这样做:
gl_vec = std::make_unique<std::vector<MyClass>>();
或者如果C ++ 14不可用
gl_vec.reset(new std::vector<MyClass>());
答案 2 :(得分:2)
constexpr unique_ptr(); - 构造一个没有任何东西的std :: unique_ptr。
gl_vec = std::unique_ptr<std::vector<MyClass>> ();
构造一个不拥有任何东西的std :: unique_ptr。
(*gl_vec).size()
std :: unique_ptr :: operator * - operator *和operator-&gt;提供对* this拥有的对象的访问权限。
* gl_vec - 提供任何访问权限。因此 - 崩溃。
你真正想做的是:
gl_vec = std::make_unique<std::vector<MyClass>> ();