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创建副本.
| 归档时间: |
|
| 查看次数: |
4434 次 |
| 最近记录: |