1
這將是有幫助的是有人能解釋爲什麼矢量深拷貝不工作時,我從一個函數返回它深複製行爲
我有一個構造函數和拷貝一個struct構造這樣
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和返回值優化]的研究(http://stackoverflow.com/questions/12953127/what-are-copy-elision-and-return-value-optimization)。 –