「Foo」インスタンスを呼び出しています
実際には、クラス Fooのインスタンスを作成しています。
具体的には、new()を介してヒープからメモリのブロックを割り当てています。このメモリ ブロックは、 Foo::containerおよびその他のオーバーヘッド クラスFooが必要とするものを格納するのに十分な大きさです。
(この例では、何もありません。他のクラスでは、追加の属性またはおそらく仮想ポインタ テーブルが存在する可能性があります。)
当然のことながら、new()は (おそらくデフォルト?) Foo::Foo()コンストラクターを呼び出します。このコンストラクターは、 std::vectorコンストラクターを介してFoo::containerを初期化します。
変数「コンテナ」のスコープはどうなりますか?
containerは、インスタンスfooの属性 [コンポーネント] です。インスタンスfooが存在する限り存在します。
スコープに関しては、Foo::containerについて話すことができます。ただし、クラスFooのインスタンスがないとFoo::constainerにアクセスできません。(例: オブジェクトfoo。) Foo::constainerは、クラスFooのインスタンスなしでは存在しません。
(1 つの値がすべてのインスタンスで共有される、多少異なる動作をするクラス変数があります。しかし、ここではそうではありません。)
この範囲指定は、公開/保護/非公開/友人のメンバー アクセス制御には関係ありません。
たとえば、一部のFoo::myPublicMethod()では、 Foo:: containerを参照できます。この状況では、明示的なスコープ設定を省略して、単にcontainerとして参照することもできます。
プライベートであるため、クラスFoo のメソッドの外でFoo::containerにアクセスすることはできません。
インスタンス foo を削除するまで、その変数は存在しますか?
はい。
「コンテナ」をベクトルへのポインタとして作成する必要がありますか?
いいえ、できますが、そうする必要はありません。
一般的に言えば、コンストラクターで new と結合されたポインターであるクラス インスタンス メンバーと、デストラクターで delete を使用しないことをお勧めします。非効率で面倒です。(既定のコピー コンストラクターはポインター値をコピーできます。その後、デストラクターは同じポインター値を 2 回削除できます。)
必要に応じて、次のことを検討してください。
int main(int argc, char* argv[])
{
Foo foo;
// other method calls to which foo is passed
return 0;
}
fooはreturn 0;の後に範囲外になります。、自動的に削除されます。さらに、fooはヒープではなくスタックから割り当てられます。
The Annotated C++ Reference Manual の中古コピーが役立つ場合があります。古いものですが、信号対雑音比が高いです。