2016-04-29 5 views
-2

パラメータ引数(C++で)内にオブジェクトの新しいインスタンスを作成するには、 "new"を使用せずにこれを行う方法があります。 "new"キーワードを使用すると、オブジェクトの削除(動的割り当て?)に対処しなければならないということは私の理解です。"new"を使用しないでパラメータ引数にオブジェクトをインスタンス化する

例:

wrapper.set_state(new Medium()); 
+0

@icbytes質問を更新しました。 –

+0

'set_state'は実際にポインタ引数をとっていますか?それとも、単に「メディア」型の引数ですか? – ArchbishopOfBanterbury

答えて

0

あなたは、スタック(新しいのない単純なコールCTOR)上のオブジェクトを作成することができます - >が、オブジェクトは、メソッドの復帰後、「削除」されます。

wrapper.set_state(Medium());

+0

私はC++にガベージコレクションの形があると思っていました。 –

+0

@MartinRand Nope、既定のアンマネージではないC++ – ArchbishopOfBanterbury

+0

@MartinRand C++にはガベージコレクションはありませんが、C++にはオブジェクトの有効期間の概念があり、その点でC++の動作を利用する必要があります。だからこそ、**はまず**一定の行動をとっています:あなたの人生を楽にするのはそこにあります。ガベージコレクションはありませんが、リソースを管理しているわけではありません。 C++ 11では、値のセマンティクスとさまざまな種類の参照を利用することで、非常に遠くまで行くことができます。 –

2

限り、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); 
} 
0

あなたはdynamicly作成「新しい」とオブジェクトを使用して、それは正しいです。 "new"を使用してobjetを作成すると、このオブジェクトを「保持」するポインタが必要になり、そのポインタでそのオブジェクトにアクセスします。

C++ 11ではスマートポインタがあります。スマートポイントを使用する場合は、オブジェクトを削除する心配はありません。あなたはYouTubeで良いチュートリアルを見つけることができます。スマートポインタについての "Bo Quian"のチュートリアルを検索してください。

あなたが本当に作成し、そのようにオブジェクトを作成したい場合は、そのオブジェクトを作成する関数を作成しようとします。

関連する問題