C++ 如何声明向量的唯一性?

C++ 如何声明向量的唯一性?,c++,c++11,C++,C++11,我试图使用unique\u ptr声明MyClass的全局向量。我的编译器是4.8.4 glo.h extern std::unique_ptr<std::vector<MyClass>> gl_vec; std::unique_ptr<std::vector<MyClass>> gl_vec; extern std::unique\u ptr gl\u vec; glo.cpp extern std::unique_ptr<std::

我试图使用
unique\u ptr
声明
MyClass
的全局向量。我的编译器是4.8.4

glo.h

extern std::unique_ptr<std::vector<MyClass>> gl_vec;
std::unique_ptr<std::vector<MyClass>> gl_vec;
extern std::unique\u ptr gl\u vec;
glo.cpp

extern std::unique_ptr<std::vector<MyClass>> gl_vec;
std::unique_ptr<std::vector<MyClass>> gl_vec;
std::unique\u ptr gl\u 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
}
#包括“glo.h”
//在功能范围内
{
gl_vec=std::unique_ptr();

cout除非初始化或分配有效的指针值,否则唯一的指针值为null

gl_vec = std::unique_ptr<std::vector<MyClass>>(new std::vector<MyClass>());
gl_vec=std::unique_ptr(新std::vector());

您没有为基础
向量分配内存

而不是

gl_vec = std::unique_ptr<std::vector<MyClass>> ();
gl_vec=std::unique_ptr();
这样做:

gl_vec = std::make_unique<std::vector<MyClass>>();
gl_vec=std::make_unique();
或者如果C++14不可用

gl_vec.reset(new std::vector<MyClass>());
gl_vec.reset(新标准::向量());
constexpr unique_ptr();-构造一个不拥有任何内容的std::unique_ptr

(*gl_vec).size()
std::unique_ptr::operator*-operator*和operator->提供对*此拥有的对象的访问

*gl_vec-不提供任何访问。因此-崩溃

你真正想做的是:

gl_vec = std::make_unique<std::vector<MyClass>> ();
gl_vec=std::make_unique();

该代码的格式不正确。赋值表达式不能出现在文件范围内。@TankorSmash:我肯定我的答案格式正确,但我没有费事发布它。请投票给我。@Ender Meh!否则就没有发生。我的投票结果仍然正确。你真的想问为什么“事情总是崩溃”这不是一个好的问题陈述。@Ender.MyClass是我想存储在unique_ptr指向的向量中的对象。这里我只是尝试初始化它,因为MyClass是我稍后通过网络接收的对象。好的-我修复了回答中的一个错误。现在它将指向新空向量的指针分配给gl_vec。我很喜欢这样,但我的compiler是gcc 4.8.4,它说它不是std的一部分。我应该考虑升级它。或者,在初始化glo.cpp中
gl\u vec
变量的存储时创建
std::unique\u ptr gl\u vec(新的std::vector);