2013-01-05 49 views
-1

可能重複:
How to disable return value optimization in Visual Studio 2010?參考計數器和RVO

我實現我的侵入PTR和有問題。當某個方法返回我的智能指針而不是調用複製構造函數時。如何禁用MS VS2012中的RVO?

+0

請張貼代碼,展示您的問題。 –

+0

請參閱我對重複問題的低調回答的評論;聲明返回的智能指針對象volatile將阻止RVO的應用。從那裏您可以希望調試該類,以便它能與RVO一起使用。 – Potatoswatter

+0

@Potatoswatter:當我嘗試編譯代碼與揮發性對象,我返回我有一個錯誤:錯誤C2558:類'A' >:沒有複製構造函數可用或複製構造函數聲明 >'顯式' – Dzmitry93

回答

2

您不需要禁用RVO,因爲您不需要複製構造函數調用,因爲RVO elision意味着該對象不會被複制,因此不需要執行額外的引用計數。

簡而言之,優化不會改變一個事物正確的代碼,速度和內存消耗以外。

+0

也許OP有一些代碼在產生*副作用的拷貝構造函數中*拷貝構造函數沒有被調用影響這個副作用容易記賬。 –

+0

@Alok:那麼它是不正確的代碼:-)。 –

+0

事實上,這是不正確的:)問題是OPs實施引用計數是容易產生副作用的。總之實施是不正確的。另外,我不認爲可以在MSVC中禁用RVO,只能禁用NRVO AFAIK。 –