パラメータ引数(C++で)内にオブジェクトの新しいインスタンスを作成するには、 "new"を使用せずにこれを行う方法があります。 "new"キーワードを使用すると、オブジェクトの削除(動的割り当て?)に対処しなければならないということは私の理解です。"new"を使用しないでパラメータ引数にオブジェクトをインスタンス化する
例:
wrapper.set_state(new Medium());
パラメータ引数(C++で)内にオブジェクトの新しいインスタンスを作成するには、 "new"を使用せずにこれを行う方法があります。 "new"キーワードを使用すると、オブジェクトの削除(動的割り当て?)に対処しなければならないということは私の理解です。"new"を使用しないでパラメータ引数にオブジェクトをインスタンス化する
例:
wrapper.set_state(new Medium());
あなたは、スタック(新しいのない単純なコールCTOR)上のオブジェクトを作成することができます - >が、オブジェクトは、メソッドの復帰後、「削除」されます。
wrapper.set_state(Medium());
私はC++にガベージコレクションの形があると思っていました。 –
@MartinRand Nope、既定のアンマネージではないC++ – ArchbishopOfBanterbury
@MartinRand C++にはガベージコレクションはありませんが、C++にはオブジェクトの有効期間の概念があり、その点でC++の動作を利用する必要があります。だからこそ、**はまず**一定の行動をとっています:あなたの人生を楽にするのはそこにあります。ガベージコレクションはありませんが、リソースを管理しているわけではありません。 C++ 11では、値のセマンティクスとさまざまな種類の参照を利用することで、非常に遠くまで行くことができます。 –
限り、const参照によってパラメータを取りset_state
として、あなたはコールサイトで一時的な値を構築することができます:一時の寿命はset_state
全体に拡張します
void Wrapper::set_state(const & Medium) { ... }
Wrapper wrapper;
wrapper.set_state(Medium());
。それ以外の場合は
、set_state
がポインタ(おそらくそれはいけない!)を取る場合、あなたが呼び出しの外でインスタンスを維持する必要があります。
void Wrapper::set_state(Medium*) { ... }
Wrapper wrapper;
{
// Local block to explicitly manage lifetime of `medium`.
Medium medium;
wrapper.set_state(&medium);
}
あなたはdynamicly作成「新しい」とオブジェクトを使用して、それは正しいです。 "new"を使用してobjetを作成すると、このオブジェクトを「保持」するポインタが必要になり、そのポインタでそのオブジェクトにアクセスします。
C++ 11ではスマートポインタがあります。スマートポイントを使用する場合は、オブジェクトを削除する心配はありません。あなたはYouTubeで良いチュートリアルを見つけることができます。スマートポインタについての "Bo Quian"のチュートリアルを検索してください。
あなたが本当に作成し、そのようにオブジェクトを作成したい場合は、そのオブジェクトを作成する関数を作成しようとします。
@icbytes質問を更新しました。 –
'set_state'は実際にポインタ引数をとっていますか?それとも、単に「メディア」型の引数ですか? – ArchbishopOfBanterbury