[解決済み] C++で "new "を使うべきとき、使ってはいけないとき?重複
質問
重複の可能性があります。
C++でnewキーワードはいつ使うべきですか?
C++で"new"演算子はいつ使うべきですか?私はC#/Javaのバックグラウンドを持っており、オブジェクトのインスタンス化は私にとって混乱を招くものです。
もし私が"Point"というシンプルなクラスを作成した場合、点を作成するときに私はすべきでしょうか。
Point p1 = Point(0,0);
または
Point* p1 = new Point(0, 0);
新しい演算子をいつ使って、いつ使ってはいけないのか、どなたか明確にしていただけませんか?
の重複です。
関連する
C++ におけるカスタムオブジェクトのコンストラクタ/デストラクタと new/delete 演算子について
どのように解決するのですか?
この場合
new
になるまでオブジェクトが存在し続けるようにしたい場合は
delete
とする。もしあなたが
new
を使わない場合、オブジェクトはスコープ外に出たときに破壊されます。いくつかの例を挙げます。
void foo()
{
Point p = Point(0,0);
} // p is now destroyed.
for (...)
{
Point p = Point(0,0);
} // p is destroyed after each loop
を使うのはどうかと言う人もいるでしょう。
new
の使用はオブジェクトがヒープ上にあるかスタック上にあるかを決定すると言う人がいますが、それは関数内で宣言された変数にのみ当てはまります。
以下の例では、'p' の位置は、それを含むオブジェクトである Foo が割り当てられる場所になります。私はこれを「インプレース」割り当てと呼びたいのです。
class Foo
{
Point p;
}; // p will be automatically destroyed when foo is.
オブジェクトの割り当て(と解放)には
new
を使ったオブジェクトの割り当て(および解放)は、インプレースで割り当てた場合よりもはるかにコストがかかるため、その使用は必要な場合のみに制限されるべきです。
で割り当てる場合の二番目の例です。
new
で割り当てる場合の二番目の例は、配列の場合です。インプレース配列やスタック配列は、実行時にサイズを変更することはできません*。
例
void foo(int size)
{
Point* pointArray = new Point[size];
...
delete [] pointArray;
}
(*pre-emptive nitpicking - yes, there are extensions that allow variable sized stack allocations).
関連
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み] static_cast, dynamic_cast, const_cast, reinterpret_cast はいつ使うべきですか?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] JavaScriptの「new」キーワードとは何ですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] 仮想デストラクタはいつ使うのか?
-
[解決済み] noexceptを本当に使うべきはいつですか?
-
[解決済み】なぜC++プログラマは'new'の使用を最小限に抑えなければならないのでしょうか?
-
[解決済み】C++でnewキーワードはいつ使うべきですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】非静的メンバ関数への参照を呼び出す必要がある
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】Cygwin Make bash コマンドが見つかりません。
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み】'std::cout'への未定義の参照
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む
-
[解決済み】C++でnewキーワードはいつ使うべきですか?