10

タイプが可能であるための十分な条件であると私理解しますが、この目的のためにも十分ですか?そうでない場合、なぜですか?is_podmemcpyhas_trivial_destructor

4

4 に答える 4

22

いいえ。要件は、型が自明にコピー可能(§3.9/ 2)であるということです。これには、自明でないコピーコンストラクター(§9/ 6)がないなど、さらにいくつかの要件があります。

自明にコピー可能なクラスは、次のようなクラスです。

—重要なコピーコンストラクター(12.8)はありません。

—自明でない移動コンストラクター(12.8)はありません。

—自明でないコピー代入演算子(13.5.3、12.8)はありません、

—自明でないムーブ代入演算子(13.5.3、12.8)はなく、

—ささいなデストラクタ(12.4)があります。

is_trivially_copyableしたがって、代わりに使用する必要があります。

于 2012-08-16T00:38:59.733 に答える
9

オブジェクトに些細なデストラクタがあるだけでは不十分です。また、簡単なコピー操作が必要です。オブジェクトは、たとえば、内部バッファへのポインタを維持する場合があります。何かを破棄する必要はありませんが、コピー先のオブジェクトにポインタを設定する必要があります。そうしないと、ソースオブジェクトのバッファを指すためです。

于 2012-08-16T00:39:02.277 に答える
5

実際には一般的にまれですが、クラスに重要なコピーコンストラクタと重要なデストラクタがある場合があります。クラスがコピーされた回数をカウントするだけの静的メンバー変数を持つクラスについて考えてみます。その場合memcpy、カウンターは不正確になります。

于 2012-08-16T00:38:50.813 に答える
0

プレーンポインターを持つクラスはとして適格であるように私には思えhas_trivial_destructorますが、通常は深いコピーを作成したいのに対しmemcpy、浅いコピーを作成します。

于 2012-08-16T00:38:53.633 に答える