使用shared_ptr返回向量的指针

sta*_*low 1 c++ boost visual-c++

我正在测试vector的shared_ptr.目的很简单,我想返回一个向量指针并访问其中的值.但它给了例外."在内存位置的.. std:out_of_range处未处理的异常......".我正在使用Visual Studio 2012.

vector<int>* func()
{
    boost::shared_ptr<vector<int> > vec(new vector<int>());

    vec->push_back(123);
    return vec.get();
    }

int _tmain(int argc, _TCHAR* argv[])
{
    vector<int>* result = func();

    cout << result->at(0); // ERROR here
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

mfo*_*ini 11

如果要使用共享指针,则返回共享指针,而不是原始指针.否则,当shared_ptr超出范围时,它将破坏向量.访问该向量将导致未定义的行为.

boost::shared_ptr<vector<int> > func()
{
    boost::shared_ptr<vector<int> > vec(new vector<int>());
    vec->push_back(123);
    return vec;
}
Run Code Online (Sandbox Code Playgroud)

但请注意,按值返回向量要好得多:

vector<int> func()
{
    vector<int> vec;
    vec.push_back(123);
    return vec;
}
Run Code Online (Sandbox Code Playgroud)

这样,就没有通过移动构造函数或RVO创建副本.