我遇到了這段現有代碼,並且仍然是C++新手,我不明白爲什麼將局部變量存儲到向量中它仍然可以訪問。C++將局部變量存儲到向量中防止它在超出範圍時被破壞
下面的代碼的簡化流程,其中BackendCall是一些類時定義:
void SaveBackendCall(BackendCall* backend_call,
vector<BackendCall>* logged_calls) {
logged_calls->push_back(*backend_call);
}
void AddNewCall(vector<BackendCall>* logged_calls) {
BackendCall backend_call; // The local variable in question.
SaveBackendCall(&backend_call, logged_calls);
}
vector<BackendCall> logged_calls;
AddNewCall(&logged_calls);
for (auto i = logged_calls->begin(); i != logged_calls->end(); ++i) {
i->access_stuff(); // This still works?
}
會不會在AddNewCall局部變量backend_call()是函數返回後銷燬?然後我不明白什麼是實際存儲在logged_calls。
將BackendCall對象的向量轉換爲unique_ptrs向量是否有意義?
一個'std :: vector'存儲它自己的一切副本。 – juanchopanza
你有嚴重的誤解!可能相關:http://stackoverflow.com/questions/23620533/thread-safe-vector/23620696#23620696 –
你需要使用'std :: move'來''push_back'''vector'中的'unique_ptr',for @juanchopanza已經提到了同樣的理由。 – 101010