來自C#世界,我努力確保我不會在我分配的C++項目中引入內存泄漏和錯誤。我正在編寫使用結構來解析來自數據緩衝區的信息的代碼。由於緩衝區中出現的數據結構數量在運行時會有所不同,因此使用stl向量來存儲處理後的數據。我在現有的軟件跨越下面的代碼塊來了,我在努力理解爲什麼它的工作原理:管理STL向量中的作用域和對象生命週期
MyVectorOfObjects.clear();
for (unsigned __int8 i = 0; i < NumberOfObjects; i++)
{
MyParserObject parserObject; // Declaring without 'new'?
parserObject.Decode(buffer, offset, size); // A method on the struct.
MyVectorOfObjects.push_back(parserObject); // Does this keep parserObject in scope?
}
我的問題是明確:
據this question,不會
parserObject
去由於new
關鍵字未被使用,因此每次迭代超出範圍?顯然這個代碼一直在工作。在這種情況下,是否將對象放置在
vector
中使parserObject
保持在範圍內?根據this question,parserObject被複制。如果是這樣的話,那麼這對性能的影響(如內存消耗,內存分配等)是什麼?另外,複製的parserObjects然後假設與向量相同的範圍?
感謝您的任何幫助。
這是一些基本的C++。我建議抓住[良好的入門C++書](http://tinyurl.com/so-cxxbooks)並從中學習。也就是說,你需要認識到C++和C#之間的一個很大的區別:在C++中,變量包含* values *(當然,除非顯式聲明爲引用),而在C#中,大多數變量包含*引用*(當然,不包括值類型)。 –
通過'MyParserObject parserObject',它的內存被程序自動管理 - 把它想象成一個'delete parserObject;'在'for'循環之後,儘管這在實踐中並不一定發生。 –
@ R.Martinho感謝您的參考...和筆記。 – bporter