如何声明vector的unique_ptr?

时间:2015-06-29 21:10:01

标签: c++ c++11

我正在尝试使用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
}

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

3 个答案:

答案 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>> ();