だから..memcpy(dataCopy、data、length);のようなものをどのように呼び出すことができますか?抽象データTをコピーするには?
または、抽象Tが安全でない場合は、TがPOD(単純な古いデータ、基本的にはC構造体)であることを知っているとしましょう-それをコピーすることは可能ですか?
任意のC++タイプで作業するという意味T
ですか?T
それがPOD(単純な古いデータ、基本的にはC構造体)型であることがわかっていない限り、。をT
使用して型のオブジェクトをコピーすることは安全ではありませんmemcpy
。これによりT
、たとえば、コピーコンストラクターが実行されなくなり、誤ったコピーが発生する可能性があります(たとえば、を実行しようとmemcpy
するstd::vector
と、データバッファーがコピーされません)。
あなたはそれを確実に行うことはできません。それがとても簡単で、可能で、信頼できるものであれば、プログラマーはoperator=()
コピーコンストラクターをオーバーロードして作成することはありません。
オブジェクトのコピーを作成する場合は、オーバーロードするかoperator=()
、copy-constructorを作成するか、またはその両方を実行してください。
Tの種類によっては危険な場合があります。TがPODの場合は、問題ありません。それ以外の場合は、Tのコピーコンストラクターを呼び出すことをお勧めします(または、不可能な場合はクローンパターンを使用します)。