C++ 参考计数器和RVO

C++ 参考计数器和RVO,c++,visual-studio,C++,Visual Studio,可能重复: 我正在实施侵入式ptr,但遇到了问题。当某个方法返回我的智能指针时,不要调用复制构造函数。如何在MS VS2012中禁用RVO?您不需要禁用RVO,因为您不需要复制构造函数调用,因为RVO省略意味着对象没有被复制,因此不需要进行额外的引用计数 简而言之,除了速度和内存消耗之外,优化不会改变正确代码的任何东西。也许OP的复制构造函数中有一些代码会产生副作用&没有调用复制构造函数会影响这种容易产生副作用的簿记。@Alok:那么这不是正确的代码:-。的确,这是不正确的:问题是引用计数的O

可能重复:


我正在实施侵入式ptr,但遇到了问题。当某个方法返回我的智能指针时,不要调用复制构造函数。如何在MS VS2012中禁用RVO?

您不需要禁用RVO,因为您不需要复制构造函数调用,因为RVO省略意味着对象没有被复制,因此不需要进行额外的引用计数


简而言之,除了速度和内存消耗之外,优化不会改变正确代码的任何东西。

也许OP的复制构造函数中有一些代码会产生副作用&没有调用复制构造函数会影响这种容易产生副作用的簿记。@Alok:那么这不是正确的代码:-。的确,这是不正确的:问题是引用计数的OPs实现容易产生副作用。简而言之,实现是不正确的。另外,我不认为可以在MSVC中禁用RVO,只能禁用NRVO AFAIK。请发布显示您的问题的代码。请参阅我对重复问题被否决的答案的评论;声明返回的智能指针对象volatile将阻止RVO应用。从那里,您有望调试该类,使其与RVO一起工作。@Potatoswatter:当我尝试使用返回的易失性对象编译代码时,出现了一个错误:错误C2558:类“A”>:没有可用的复制构造函数或复制构造函数声明为>“显式”