gpt4 book ai didi

c++ - 当复制构造函数是私有(private)的且未实现时是否允许 RVO?

转载 作者:可可西里 更新时间:2023-11-01 16:37:02 25 4
gpt4 key购买 nike

假设我有一个类,其中复制构造函数是私有(private)的并且未实现(使对象不可复制)

class NonCopyable {
// whatever
private:
NonCopyable( const NonCopyable&);
void operator=(const NonCopyable&);
};

现在在同一个类的一些成员函数中,我编写了返回该类对象的代码:

NonCopyable NonCopyable::Something()
{
return NonCopyable();
}

这是 RVO 可以启动的情况。

RVO 仍然要求复制构造函数是可访问的。由于对复制构造函数的可能调用是从同一个类成员函数中完成的,因此复制构造函数是可访问的。因此,从技术上讲,RVO 是可能的,尽管其目的是禁止使用复制构造函数。

在这种情况下是否允许 RVO?

最佳答案

是的,在这种情况下允许 RVO - 至少如果 Something() 的调用者是类(class)成员或 friend 。

我认为这就是为什么不可复制类的私有(private)继承比在每个你想防止复制的类中“手动”执行它更好的原因之一。在那种情况下没有意外漏洞。

例如,使用boost::noncopyable:

class NonCopyable : private boost::noncopyable {
public:
NonCopyable() {};
NonCopyable Something();
};

NonCopyable NonCopyable::Something()
{
return NonCopyable(); // causes compile time error, not link time error
}

关于c++ - 当复制构造函数是私有(private)的且未实现时是否允许 RVO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10294303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com