クラスのインスタンスを作成するのとは逆のことをしたいnoncopyable
、つまり、特定のクラスのインスタンスがコピーとしてのみ渡され、参照として渡されないようにします。関数が参照によってそれを受信しようとすると、(理想的には) コンパイル エラーまたは実行時エラーが発生するようにします。
プライベートにすることでそれができるとは思いoperator &
ません。これを行う正当な方法はありますか。
クラスのインスタンスを作成するのとは逆のことをしたいnoncopyable
、つまり、特定のクラスのインスタンスがコピーとしてのみ渡され、参照として渡されないようにします。関数が参照によってそれを受信しようとすると、(理想的には) コンパイル エラーまたは実行時エラーが発生するようにします。
プライベートにすることでそれができるとは思いoperator &
ません。これを行う正当な方法はありますか。
それ無理。名前付き変数は、適切なタイプの参照変数にバインドできます。それが言語のしくみです。
特に、制限付きのコピーコンストラクターを持つことはできないため、実際にオブジェクトを値で渡すことはできませんでした。
オペレーターとプライベートを作ることでそれができるとは思いません。これを行う正当な方法はありますか。
いいえ、&
参照渡しの関数シグネチャで使用する は演算子ではないためです。アドレス演算子 (単項) またはビットごとの AND 演算子 (バイナリ) のいずれかについて話している。したがって、参照渡しとは何の関係もありません。
type の参照渡しを禁止する方法はありません。
あなたの動機がこれを行うのに十分強いとは思えません。また、パスのメカニズムをよく理解していないようです。
関数が参照によってそれを受信しようとすると、(理想的には) コンパイル エラーまたは実行時エラーが発生するようにします。
関数は、パラメーターを参照または値で渡します。それはその宣言によって決定され、あなたの混乱はここから生じていると思います。例えば:
void foo(X x);
パラメータx
を値で受け取ります。参照で渡す方法はありません。とんでもない。同じく:
void foo(X& x)
参照によってそれを受け取り、常にそうします。