假設你有一個類的std :: list。有兩種方法可以讓這個列表: 1)std ::對象列表效率
std::list<MyClass> myClassList;
MyClass myClass;
myClassList.push_front(myClass);
使用這種方法,當你傳遞對象到列表中的拷貝構造函數將會被調用。如果這個類有許多成員變量,並且你多次進行這個調用,它可能會變得昂貴。
2)
std::list<MyClass*> myClassList;
MyClass* myClass = new MyClass();
myClassList.push_front(myClass);
此方法不會呼籲類的拷貝構造函數。我不完全肯定在這種情況下會發生什麼,但我認爲該列表將創建一個新的MyClass *並分配參數的地址。事實上,如果你在棧上而不是堆上創建myClass,並讓它超出範圍,那麼myClassList.front()是無效的,所以必須是這種情況。
如果我對此有誤,請與我反駁,但我相信第二種方法對於某些類更有效率。
你說得對。 – 2012-03-23 05:10:06
我個人會在那裏有一個'unique_ptr'如果你想讓ptrs被釋放。 –
2012-03-23 05:11:30
還有第三種方式,它比這兩個方法更有效率:'myClassList.emplace_front()'。另外 - 如果效率是一個問題,你幾乎肯定不想使用'std :: list'。 – Mankarse 2012-03-23 05:12:08