コピーコンストラクターがプライベートで実装されていないクラスがあるとします(オブジェクトをコピー不可にするため)
class NonCopyable {
// whatever
private:
NonCopyable( const NonCopyable&);
void operator=(const NonCopyable&);
};
同じクラスのいくつかのメンバー関数で、そのクラスのオブジェクトを返すコードを記述します。
NonCopyable NonCopyable::Something()
{
return NonCopyable();
}
これは、RVOが開始できる場合です。
RVOでは、コピーコンストラクターにアクセスできる必要があります。コピーコンストラクターへの可能な呼び出しは同じクラスメンバー関数内から行われるため、コピーコンストラクターにアクセスできます。したがって、コピーコンストラクターの使用を禁止することが目的であったにもかかわらず、技術的にはRVOが可能です。
そのような場合、RVOは許可されますか?