Stringstream のコピーが禁止されている理由
コピー コンストラクターのプライベート化のため、C では stringstream オブジェクトのコピーが許可されていません。これは、stringstream、istream、ostream、iostream を含むすべてのストリーム タイプに適用されます。
ストリームは、複製できる単なるコンテナではありません。これらは、データが流れる導管として機能し、ソースとシンクを接続します。コンテナとは異なり、ストリームはデータを保持するのではなく、その送信を容易にします。
ストリームをデータを転送するパイプに例えて考えてみましょう。ストリームのコピーを作成することは、同じデータ ソースに接続された追加のパイプを作成することに似ています。ただし、データは元のストリームによってすでに消費されているため、コピーによって受信される新しいデータはありません。
説明するには:
int main() { std::stringstream s1("This is my string."); std::stringstream s2 = s1; // error, copying not allowed }
この例では、 s1 を s2 にコピーすると、すでに使い尽くされたデータ ソースへの重複した接続が作成されるため、エラーが発生します。
ストリームのコピーは禁止されていますが、参照の作成は禁止されています。彼らにとってはまだ許されることだ。これにより、複数のコード エンティティが、重複することなく、同じ基礎となるデータ ソースにアクセスできるようになります。
std::istream copy_cin = std::cin; //error std::istream & ref_cin = std::cin; //ok
さらに、既存のストリームと同じ基礎となるバッファを使用する新しいストリーム オブジェクトを作成することも可能です。
以上がC で「stringstream」オブジェクトをコピーできないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。