gpt4 book ai didi

c++ - 为什么在这种情况下使用 vector<>.push_back() 时不使用动态内存?

转载 作者:行者123 更新时间:2023-11-30 00:54:43 34 4
gpt4 key购买 nike

我发现了一段 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 );
}
}

_store声明如下:vector< vector<int> > _store;

好像违背了我对局部变量和栈的理解。在我们退出这个构造函数的那一刻,本地创建的 vector 的内存不应该停止存在吗?鉴于 vector<int>.push_back() 更是如此需要别名引用作为其输入参数,因此永远不会调用复制构造函数,什么 push_back() receives 是对局部变量的实际引用?

最佳答案

So the copy constructor is never invoked and what push_back() receives is the actual reference to the local variable?

没有。
std::vector_push_back()复制传递的对象。作为参数传递的对象的内容可能被复制/移动(在 C++11 中)到新创建的对象。

push_back()有两种形式从 C++11 开始:

void push_back (const value_type& val);
void push_back (value_type&& val);

在你的例子中,vector<int>()创建一个临时(r 值),因此将使用第二种形式。第二种形式会将临时内容移动到添加到 vector 中的新对象。因此,它将使用移动构造函数而不是复制构造函数。

关于c++ - 为什么在这种情况下使用 vector<>.push_back() 时不使用动态内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13656375/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com