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

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

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

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

Q&A

解決済

2回答

1422閲覧

C++ new演算子の使い方

Tololololo

総合スコア118

C++

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

0グッド

0クリップ

投稿2018/10/02 06:14

編集2018/10/02 06:33

C++

1 2class A{ 3... 4}; 5 6A *valA = new A;

これはAクラスのインスタンスを変数valA(Aという型)で動的に生成しているという認識で良いですか?

  • 追記 -

C++

1int a = etc...; 2char a = etc...;

これらはよく目にしますが、型指定と"new"を入れることによってメモリを動的確保できるらしいと目にしたので、その上で記法or認識が間違っていないか確認のために投稿しました。( ͡° ͜ʖ ͡°)

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/10/02 06:25

なぜその疑問を抱いたかを追記してもらえると答えやすいかと思います。
guest

回答2

0

こんにちは。

これはAクラスのインスタンスを変数valA(Aという型)で動的に生成しているという認識で良いですか?

合っていると思います。

C++

1int a=123; // 静的確保 2int main() 3{ 4 int b=456; // スタック上に動的確保 5 int* p=new int(789); // ヒープ上に動的確保 6 delete p; // newで獲得したものはdeleteしないとメモリ・リーク 7}

型指定と"new"を入れることによってメモリを動的確保できるらしい

この理解も間違っているわけではないと思いますが、なんとなく微妙な気配を感じます。

intも型指定です。
newはヒープ上に動的確保します。上述のようにスタック上に動的確保する場合はnewを使いません。

因みにnew演算子はC言語のmallocの機能拡張版と理解しても大きくは外れません。mallocは確保したメモリの使い方は完全にプログラマ任せですが、newは確保したインスタンスの型がclassならばそのコンストラクタが必ず呼ばれます。

投稿2018/10/02 09:01

Chironian

総合スコア23272

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

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

0

ベストアンサー

C++に触れるのはかなり久しぶりなのもあり正確かちょっと怪しいですが、サンプルで作ったコードが動いたので回答します。(※専門家の人であれば、もっと専門用語を使って間違いのない説明してくれるとおもいますが。)

メモリを動的に確保しているというのはあっています(new Aの部分)。
それ以外がちょっと怪しいです。

new AによってクラスAのインスタンスとなるメモリを動的に確保し、そのメモリへのアドレスを取得します。
そしてそのアドレスはポインタ変数である ptrA に代入されます。

サンプルコードの②を見てほしいのですが、(*ptrA)としていますよね。
*を付けることで、ポインタ変数をクラス変数のように使えるようにしています。

C++

1class A { 2 public: 3 char* hello = "hello"; 4}; 5 6int main() 7{ 8 A a; 9 printf("%s\n", a.hello); 10 11 A *ptrA = new A; // ① メモリを動的に確保し、ポインタを取得、代入する 12 printf("%s\n", (*ptrA).hello); // ② ポインタを参照して、メンバ変数を得る 13 free(ptrA); // ③ 動的に確保したメモリを開放する 14 15 int x; 16 scanf("%d", &x); 17 18 return 0; 19}

投稿2018/10/02 07:05

編集2018/10/02 07:08
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問