c++ - 使用 shared_ptr 返回 vector 的指针

标签 c++ visual-c++ boost

我正在测试 vector 的 shared_ptr。目的很简单,我想返回一个vector的指针,访问里面的值。但它给出了异常(exception)。 “未处理的异常 .. 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;
}

最佳答案

如果你想使用共享指针,那么返回一个共享指针,而不是原始指针。否则,当 shared_ptr 超出范围时,它将破坏 vector 。访问该 vector 将导致未定义的行为。

boost::shared_ptr<vector<int> > func()
{
    boost::shared_ptr<vector<int> > vec(new vector<int>());
    vec->push_back(123);
    return vec;
}

但是,请注意按值返回 vector 要好得多:

vector<int> func()
{
    vector<int> vec;
    vec.push_back(123);
    return vec;
}

这样,无论是通过移动构造函数还是RVO,都不会产生任何拷贝。 .

关于c++ - 使用 shared_ptr 返回 vector 的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17447388/

相关文章:

c++ - 在同一链中执行异步操作

c++ - 一个空类和一个空结构是如何编译的?

c++ - LNK2001 关于所有私有(private)方法

c++ - Boost 在当前目录中看不到 jamfile

c++ - boost::asio::async_read 不回调我的处理函数

C++-BGL : sort edges

c++ - 将大括号内的 'this' 传递给 C++ 中的类的对象

c++ - WinINet异步模式灾难

windows-services - 如何安装用VC++ 6.0创建的Windows服务

c++ - 在这种情况下如何使用动态多态性?