1

Netbeans は、このデフォルトのコンストラクターを作成しました。私はその目的が何なのか興味がありました。私はそれを何と呼ぶべきか、またはそれが何をするのかわかりません。それはもっと好奇心です。私の唯一の考えは、おそらくクローンですか?何かが私が間違っていると教えてくれます。

#ifndef     FOO_H
#define FOO_H

class Foo {
public:
    Foo();
    Foo(const Foo& orig);
    virtual ~Foo();
private:

};
4

2 に答える 2

2

はい、Netbeans は親切にもデフォルト コンストラクターとコピー コンストラクターを明示的に作成しました。

Foo* foo = new BabyFoo(); delete foo;また、このクラスから継承する際のメモリ リークを回避するのに役立つ仮想デストラクタも提供しています(BabyFoo は Foo の子クラスであると考えてください)。Foo に仮想デストラクタがない限り。

私は Netbeans がこれを行う方法が好きではありません:

1) コピー コンストラクターは保守が難しく (新しく追加されたメンバー データをコピーするのを忘れがちです)、メンバー データを明示的にコピーする必要がない場合は提供する必要がないと思います (ベア ポインター データはおそらく必要になるでしょう)。明示的にコピーされます)。コンパイラによって自動的に生成されたものは、すべてのメンバー データを (浅く) コピーします。

2) 仮想デストラクタは、オーバーヘッドである仮想関数ポインタ テーブルをクラスに導入します。

3) Oli Charlesworth のコメントに感謝します: http://en.wikipedia.org/wiki/Rule_of_three_(C%2B%2B_programming)

于 2013-06-28T07:27:07.897 に答える
0
Foo(const Foo& orig); 

これはコピー コンストラクターです。すべてのクラスには、コンパイラによって提供されるデフォルトのコピー コンストラクターがあります。

その目的は、既存のオブジェクトのコピーを作成することです

コピー コンストラクターの詳細については、http://en.wikipedia.org/wiki/Copy_constructorを参照してください。

于 2013-06-28T07:44:26.700 に答える