【发布时间】:2017-09-25 09:33:30
【问题描述】:
如果有人可以解释为什么当我从函数返回向量深拷贝时它不起作用,这将很有帮助
我有一个像这样的带有构造函数和复制构造函数的结构
struct {
A() { cout<<"Constructor..."<<endl; }
A(const A &) { cout<<"Copy Constructor...."<<endl;
};
如果我写一个这样的主程序
int main() {
A a1; // constructor gets called here
vector<A> vec;
vec.push_back(a1) // Copy constructor gets called here
vector<A> copyvec = vec; // Again copy constructor gets called here
}
但是,如果我像这样更改代码
vector<A> retvecFunc() {
A a1; // Constructor gets called
vector<A> vec;
vec.push_back(a1); // Copy Constructor gets called
return vec; // copy constructor **DOESN'T GETS CALLED**
}
我的主要功能写成
int main() {
vector<A> retVec = retvecFunc();
return 0;
}
【问题讨论】:
-
你可能想对copy-elision and return value optimizations做一些研究。
标签: c++ c++11 visual-c++ c++14