Car*_*din 1 c++ memory-management
我发现了一段C++代码,如下所示:
// constructor that creates a 2D vector _store[nRow][nCol]
FlexiMatrix::FlexiMatrix(int nRow)
{
for (int i = 0; i < nRow; i++){
_store.push_back( vector<int>() );
_store[i].push_back( 0 );
}
}
Run Code Online (Sandbox Code Playgroud)
并_store声明如下:vector< vector<int> > _store;
这似乎违反了我对局部变量和堆栈的理解.当我们退出这个构造函数时,本地创建的向量的内存是否应该不存在?这更vector<int>.push_back()需要别名引用作为其输入参数,因此永远不会调用复制构造函数,push_back()接收的是对局部变量的实际引用?
所以从不调用复制构造函数,
push_back()接收的是对局部变量的实际引用?
No.
std::vector_push_back()制作传递对象的副本.作为参数传递的对象的内容可能被复制/移动(在C++ 11中)到新创建的对象.
push_back()自C++ 11以来有两种形式:
void push_back (const value_type& val);
void push_back (value_type&& val);
Run Code Online (Sandbox Code Playgroud)
在您的情况下,vector<int>()创建一个临时(r值),因此将使用第二个表单.第二种形式将临时内容移动到新对象,该对象将添加到向量中.因此,它将使用移动构造函数而不是复制构造函数.
| 归档时间: |
|
| 查看次数: |
134 次 |
| 最近记录: |