質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

1122閲覧

newとmallocについて

apa

総合スコア68

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/07/21 04:49

最近のプログラムを見ているとメモリの確保をほぼすべてnew演算子でやっているように思えます。
そこで自分なりにmallocとnewの違いについて調べてみました。
大きいところではmallocではコンストラクタ、デストラクタが呼ばれない
mallocはメモリを動的に増やしたり減らしたりできる
正直mallocがここまで使われない致命的なものは見つかりませんでした。

newはC++で統一性をもたるためにつかわれているのでしょうか?
またmallocは実際どういった場面で使うのがベストなのでしょうか?
以上2点について詳しい方おりましたら教えていただけると幸いです。

よろしくおねがいします!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

すくなくともC++では

  • newはコンストラクト込みのmalloc
  • deleteはデストラクト込みのfree

とみなすことができ、つまり上位互換なので
malloc/freeを積極的に使用する意義を見出せません。
※ Cとのインタフェースをとるため、といった目的でないかぎり

なので
「またmallocは実際どういった場面で使うのがベストなのでしょうか?」
については (Cとのインタフェースをとるため、といった目的でないかぎり)使う場面は無いと考えます。

さらに言えば、C++では new/delete すら使うなって方向に進んでます。
vector/stringあるいは make_unique/make_shared 等により、new/deleteより安全な代替がありますから。

投稿2020/07/21 04:57

編集2020/07/21 05:00
episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

apa

2020/07/21 05:20

なるほど ありがとうございます。 sltでメモリ管理ができるのは初耳なので勉強してみます
episteme

2020/07/21 06:59 編集

メモリ管理ができるというか、(裏でせっせとやってくれるから)プログラマがメモリ管理せずに済む。ですけど。
guest

0

またmallocは実際どういった場面で使うのがベストなのでしょうか?

C++で使う必要性は(C言語で書かれた部分との互換性を取るために必要な場合を除けば)ありません。

投稿2020/07/21 04:53

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/07/21 04:54

> 正直mallocがここまで使われない致命的なものは見つかりませんでした。 逆に、「C++なのにmallocを使わなければならない」理由も、全くと言っていいほど存在しません。
maisumakun

2020/07/21 04:56

そもそも論を言えば、C++であればSTLやスマートポインタなどを活用して、「自前でメモリ管理する」必要性自体を削減することが可能です。
apa

2020/07/21 05:21

返信ありがとうございます。 sltでメモリ管理ができるのは初耳なので勉強してみます
maisumakun

2020/07/21 05:22

たとえば、vectorやstringを使っていれば、(直接配列や文字列を扱うのと比較して)メモリ管理の必要性そのものが消滅します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問