2011-01-23 10 views

答えて

3

任意のC++タイプTで作業することを意味しますか? TがPOD(普通の古いデータ、基本的にはC構造体)タイプであることが分かっていなければ、タイプTのオブジェクトをmemcpyでコピーすることは安全ではありません。そうすれば、たとえば、memcpyにしようとすると、std::vectorがデータバッファをコピーしないなど、不正なコピーにつながる可能性があるのコピーコンストラクタが実行されなくなります。

+0

@Jeremiah:PODにポインタがある場合、 'memcpy'でオブジェクトをコピーするのは"安全 "でしょうか?それは本当に元のオブジェクトのコピーですか?それはどんな種類のコピーですか? – Nawaz

+0

@Nawaz - PODにポインタがある場合、コピーは有効です(つまり、割り当て操作を使用した場合と同じです)。 Cの場合と同様に、コピーは浅いので、ポインターが指すオブジェクトはコピーされません。 –

+0

@Jeremiah:あなたが言うように、そのようなコピーが* safe *ならば、非PODを 'memcpy'でコピーすると何が問題になりますか? – Nawaz

0

これはTのタイプによって危険です。TがPODタイプの場合は、すべて問題ありません。それ以外の場合は、単にTのコピーコンストラクタを呼び出すことをお勧めします(できない場合は、クローンパターンを使用してください)。

3

あなたcantそれを確実に行います。それがとても簡単で、可能であり、信頼できるものだったならば、プログラマーはoperator=()をオーバーロードしてコピーコンストラクターを書くことはありません。

オブジェクトのコピーを作成する場合は、operator=()をオーバーロードするか、コピーコンストラクタを書き込むか、両方を実行します。

関連する問題