• ベストアンサー

オブジェクト作成方法の違い

C++の勉強中でいろんなサイトを見ていたのですが、 オブジェクトとの作成方法にnewを指定しているときと 指定していないときの違いが分かりませんでした。 あと、newで作成された場合は動的にメモリを確保して deleteする必要がありますが、newされていない方は deleteする必要はないんでしょうか? パターン1 TestClass test("Hello"); パターン2 TestClass *test = new TestClass("Hello");

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65535
  • ベストアンサー率44% (8565/19462)
回答No.1

>newされていない方はdeleteする必要はないんでしょうか? オブジェクトを「int型の変数」に変えて考えてみよう。 TestClass test("Hello"); ↓ int i; TestClass *test = new TestClass("Hello"); ↓ int *p = new int; 型が「int」であろうが「TestClass」であろうが、書き方は同じ。 もし void sub(void) { int *p = new int; delete p; } と書いてあったら「pをdeleteする必要がある」のは明白。 同様に void sub(void) { int i; } と書いてあったら「iをdeleteする必要があるかどうか?」などと悩まない筈。

DHIN
質問者

お礼

chieさん、返答ありがとうございます。 ということは、newしていないものは 普通の変数の定義と一緒なんですね。 分かりやすい回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C#で使えるオブジェクトを作成するには

    VisualC++のMFCを利用して、C#でも簡単に使えるオブジェクトを作成したいです。 MFCのオートメーションをサポートするDLLを作成しまして、 メソッドは echo とします。 VBSでは、 dim obj set obj = CreateObject("mytest.test") MsgBox obj.echo("hello") で簡単にオブジェクトを利用することができますが、 WEBで探したら、C#は結構面倒です。 MFCでどうやってオブジェクトを作ったら、 C#でもVBSのように簡単に使えるでしょうか。 ひとつ案として、ActiveXコントローラーを作ったら、 C#のフォームに貼り付けて、それならば、簡単にメソッドを呼び出すことができます。でも、GUIが必要になっちゃいます。 できればC#でこんな風に、  Mytest.test obj = new Mytest.testClass(); MessageBox.Show(obj.echo("hello")); 見たいなことをしたいです。 MFCでどうやってこのような Mytest.test を作れるでしょうか。 よろしくお願いします。

  • newしないオブジェクトについて

    C++で オブジェクト生成時、NEW しない場合、 どこにメモリ領域が作られているのでしょうか? また、newはmallocと同じで、動的にメモリを確保ということはわかるのですが、 では、newしない場合、静的ということになるのでしょうか? そうだとすると、静的なオブジェクトとは一体どのようなものをいうのでしょうか? よろしくおねがいします。

  • Stringオブジェクトの作成で理解できないことがあるので教えてもらえませんか?

    現在、Javaの資格勉強をしています。 (1)String str = "abc"; (2)String str = new String("abc"); この二つの作成の違いが理解できません。 (1)一つのStirngオブジェクトが作成されます。 (2)二つのStringオブジェクトが作成されます。 と記載してあります。単純にnew を使用すると二つ作成されると考えていいのでしょうか

    • ベストアンサー
    • Java
  • クラスの宣言でのメモリ使用サイズの違い

    お世話になります。 現在、Visual Studio 2005にてMFCのC++のプログラムを作成しているのですが、そこでメモリの使用容量について疑問に感じた点があったのでこちらで、質問させて頂きました。 お聞きしたい内容は あるクラス1内で別のクラス2を宣言する際に、メンバ変数としてそのクラス2を宣言し、クラス1のコンストラクタでnewでメモリを確保し、デスクリタでdeleteする方法と、その都度クラス2の変数または関数が必要なときにnewでメモリを確保して、deleteで開放する方法とでは、メモリの確保等で違いがなにかありますでしょうか? また、クラス2をクラス1,クラス3で使用する場合には、クラス1,クラス3でそれぞれクラス2のオブジェクトを宣言するのと、クラス1でクラス2のオブジェクトを宣言し、そのオブジェクトをクラス3でexternするのではどちらの方がメモリの使用等からよい方法なのでしょうか? 今までほとんどメモリを気にせずにプログラムを作っていた為、メモリの使用の点ではほとんど無知な為、変な質問なのかもしれませんが、ご存知の方がいらっしゃいましたら、ご回答をお願い致します。 開発環境は Widows CE 6.0 Visual Studio 2005 です。

  • 【C++】オブジェクト配列の動的確保

    Objectがクラスとして、以下のようなプログラムを書きました Object **obj; obj = new Object*[100]; for(i=0;i<100;i++){     obj[i] = new Object(a,b,c);     obj[i]->Run();     delete obj[i]; } delete [] obj; するとdeleteの所でエラーになります。 (確保していない領域をdeleteしようとしたときのような) 何か間違っているのでしょうか。 何故かデバッガでは通ってしまいます。 環境:XP、VisualStudio2005 何卒よろしくお願いいたします。

  • インスタンスオブジェクトとは何かについて教えて!!

    下記内容はあるサイトのインスタンスについての説明文です。 画像は、自分なりに理解したものです。 (1)メモリ上には記憶場所(=ポインタ)はない (2)var Aa = new Bb("13" , "smole");とscript内に追加されたことにより メモリ上に記憶場所(=ポインタ)が作成され、 BbオブジェクトつまりBb("13" , "smole");がその記憶場所(=ポインタ)に入る (3)そしてBb("13" , "smole");が入った 記憶場所(=ポインタ)にAaという名前を付ける。 考え方に間違いがあるでしょうか? ---------------------------------------------------- var Aa = new Bb("13" , "smole"); これは、BbクラスオブジェクトのBbコンストラクタをnew演算子を利用して起動しています。 new演算子は、メモリ上に記憶場所を確保して、Bbオブジェクトを作成した後、そのポインタを返す演算子です。 new演算子から返されたポインタは、Aaへ格納されます。この場合のAaをBbオブジェクトのインスタンスといいます。 また、new演算子でメモリ上に記憶場所を確保して作られたオブジェクトをインスタンスオブジェクトといいます。 つまり、 オブジェクト == インスタンスオブジェクト で、 インスタンス != インスタンスオブジェクト インスタンス != オブジェクト です。 ----------------------------------------------------

  • オブジェクトの生成

    C++におけるオブジェクトの生成ですが、 普通の変数と同様に宣言するの方法と、 newを使用して動的に生成する方法があります。 色々調べてみて、理屈では判ったつもりなのですが、 newで動的にメモリに確保する、 と言う事の使いどころが、今ひとつピンときません。 どの様な場合、実行時にどれだけメモリが必要かわからないのでしょう? ちなみに、私は、Cではバッチ処理の開発を主に行ないましたが、或いは、クライアント/サーバ系などでは必須なのでしょうか? 宜しくお願い致します。

  • C++でのクラスオブジェクトの破棄

    こんにちは。 C++では、プログラムの終了時に、全てのクラスオブジェクトは、デストラクタが呼び出されて破棄されますが、プログラムの途中で、クラスオブジェクトを明示的に破棄する方法はあるのでしょうか? 例えば、new演算子によってメモリを動的に割り当てたポインタなら、delete演算子で破棄できますが、 クラスオブジェクトにdelete演算子は使えないようです。 何かいい方法を知っておられる方がいらっしゃれば、是非アドバイスを頂きたいと思います。

  • php インスタンスとオブジェクトの呼び方

    new obj = new Test(); という一文は、 「Testクラスのオブジェクト、objを作成している」という考えを持っています。 オブジェクトは物という概念で、 「Testクラス を new して、objインスタンスを作成している」 というのが正しいのでしょうか? 【objを Testオブジェクトと呼ぶのは間違っているのでしょうか? objは Testインスタンスと呼ぶのがやはり正しいのでしょうか?】 知り合いにも、インスタンスではなくオブジェクトと呼んでる人が多いのでわからなくなってきました。 ご教授お願いします。

    • ベストアンサー
    • PHP
  • Stringオブジェクトについて

    ある参考書では、Java のメモリー使用効率を改善するために、JVM は「String 定数プール」と呼ばれる特別なメモリー領域を確保していると書いてあり、String を作成する例として次の2つのパターンのコードについて説明している(この例では、定数プール内にほかのString は存在しないものとしている)。 ・パターン(1) String s = "abc"; // 1つのString オブジェクトと         // 1つの参照変数を作成する この例では、"abc" がプールに納められ、変数s がそれを参照する。 ・パターン(2) String s = new String("abc"); // 2つのString オブジェクトと                  // 1つの参照変数を作成する。 このコードでは、new キーワードを使ったので、新しいString オブジェクトが標準の(プールでない)メモリー上に作成され、変数s がそれを参照する。さらに、リテラル"abc" がプールに収められる。  そこで質問ですが、パターン(2) で、変数s と2つのオブジェクトはそれぞれ互いにどのような関係(メモリー上の関係も含めて)を持っているのか。 例えば変数s に対してプリント命令を出したときにJVM はこの2つのオブジェクトに対してどのような処理をするのか。 またこれらのオブジェクトのhashcode はどうなっているのでしょうか。どなたか教えてください。

このQ&Aのポイント
  • 質問文章では、職員AとBの関係において、職員Aが職務上のミスを指摘せずに放置していることが問題とされています。職員Aは以前からトラブルを起こしており、その関係性が今回の行動に影響している可能性も考えられます。
  • 質問者は職務を教えてもらえる時には教えてもらっているが、職務をわざと教えないことがパワハラになるのか疑問を抱いています。ただし、この情報だけでは明確な判断はできません。
  • 職務上のミスに関する指摘は、適切な職場指導の一環として行われるべきです。しかし、他の職員にそのことを話すのではなく、直接関係者である職員Bと話し合うべきです。職務を教えない理由が「面倒くさい」というものである場合、それはパワハラの可能性があります。
回答を見る