だから、私はいつもC++のポインターとは少しぼやけています。同様に、スタック変数を返しますか?
Object* pointer = new Object();
対
Object notpointer();
私はポインタがおそらく二番目に関与していることを知っているが、基本的にそれはないポインタです。 (それが実際に何を呼ばれています?)
さらに、私は右、最初のもののために、あなたはあなたがそれを完了したら、いくつかの点で
delete pointer;
を呼び出すために持っていることを信じますか?もう1つは心配する必要はありません。私は最初にヒープに割り当てられているが、スタックには2番目が割り当てられていて、メソッドが返ってくると遠ざかります。
しかし、関数から何か(プリミティブではない)を返すときはどうですか?
良い例がShould I return std::strings?で書かれている:右、
std::string linux_settings_provider::get_home_folder() {
return std::string(getenv("HOME"));
}
私が以前に書いたものでは、文字列をスタック上に割り当てられ、関数が戻るときに解放されなければなりませんか?しかし、誰もそれについて何も言わなかったので、それはうまくいくと思います。どうして?一般的に
、
return new std::string("pointer");
と
return std::string("not-pointer");
の違いは何ですか?
また、両方の作業を仮定すると、2つの賛否両論は何ですか?
2つ目は関数です。 – chris
ここではいくつかのコンセプトを組み合わせています。ポインタはメモリアドレスを保持できる単なる変数です。 'new std :: string'はメモリ割り当てとオブジェクト構築を実行しています。これらの2つのものを一緒に使う必要はありません。現代のC++では、通常これをしません。 – greatwolf
文字列はスタックに割り当てられます。 ** **解放されていません。それは破壊される。しかし、コンパイラーはそれを破壊する前にそれをコピーします。 –