2

私はヘッダーファイルを持っています:

class day
{
public:
day(int id);
~day();

private:
int id;
std::list<meeting*> meetings;


};

そして私の.cppファイルで:

#include "day.h"
#include "meeting.h"

day::day(int id) : id(id) {  }

meetings()コンストラクターの初期化リストに追加する必要がありますか?

day::day(int id) : id(id), meetings() {  }

コンストラクターでオブジェクトを初期化するルールについてはよくわかりません。コンストラクターで明示的に初期化されていなくても、すべてのプライベートメンバーオブジェクトが初期化されますか?また、リスト内のオブジェクトを削除するには、リストのデストラクタを作成する必要がありますか?

ありがとう。

4

4 に答える 4

3

いいえ、デフォルトのコンストラクターを持つ型は、デフォルトで値が初期化されます

初期化リストから省略した場合、.idであるため、初期化されませんint。ただし、std::listメンバーはそうします。

public/とは関係ありませんprivate

また、リスト内のオブジェクトを削除するには、リストのデストラクタを作成する必要がありますか?

dayがそれらのオブジェクトの所有者である場合のみ。それらがクラスの外部で作成され、クラスのメンバーに挿入されただけの場合、呼び出し元のコンテキストが破棄を処理する必要がある可能性があります。

于 2012-05-15T12:52:33.547 に答える
1

std::listデフォルトのコンストラクターが呼び出されるため、初期化する必要はありません。

通常、以下を初期化する必要があります。

  1. intなどの組み込み型は、floatガベージ値で初期化されます。
  2. デフォルトのコンストラクターを持たない他のすべてのユーザー定義型。
于 2012-05-15T12:58:54.023 に答える
1

いいえ、listデフォルトでは空になります。listin デストラクタ内のオブジェクトを削除する必要があるかどうかは、リストの作成方法によって異なります。yes のようなものを挿入する場合meetings.insert(new meeting())は、デストラクタ内のオブジェクトを削除する必要があります。

于 2012-05-15T12:52:38.350 に答える
0

いいえ、デフォルトの構築で十分なので必要ありません。

同様に、オブジェクトが破棄されると、リストが破棄されます。ただし、リストが自動的にすべての内容を破棄するとは思わないので、デストラクタでそれを行う必要があります。

于 2012-05-15T12:52:49.313 に答える