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);