-2

私が書いた;

Element element=new Element;

エラーが発生しました。

homework.cpp: In function 'int main(int, char**)':
homework.cpp:227:29: error: conversion from 'Element*' to non-scalar type 'Element' requested

*** 1 errors, 0 warnings

ポインターや要素の配列は必要ありません。

と書いたほうがいいのですがElement *element= new Element;。説明する誰か?

編集:

要素クラス:

class Element{
  public:
      Element():exists(false){};

      std::string name;
      std::string full_path_name;
      ElementType element_type;
      long element_size;
      bool exists;

  };
4

4 に答える 4

7

動的オブジェクトを割り当てたい場合は、次のようになります

Element* element = new Element;

newフリー ストア内のオブジェクトへのポインターを返すためです。オブジェクトの使用が終了したら、メモリ リークを防ぐために呼び出すdelete element必要があります。メモリを手動で管理する必要を避けたい場合は、次を使用できますstd::unique_ptr

std::unique_ptr<Element> element = new Element;

ポインタが範囲外になると、ポインタが自動的にelement呼び出されます。deleteしかし、自動オブジェクトを作成したくないだけですか?

Element element;

これにより、オブジェクトが自動ストレージに作成され、手動で割り当てを解除したり、スマート ポインターを使用したりする必要がなくなり、はるかに高速になります。それが最善の方法です。Element element();(ただし、変数宣言ではなく関数のプロトタイプであることを確認してください。)

于 2012-05-12T14:49:29.277 に答える
1

オブジェクトに引数が必要ない場合は、次のことができます

Element * element=new Element();

オブジェクトがコンストラクターで引数を必要とする場合、作成時に渡す必要があります

Element * element=new Element(argument1, argument2);
于 2012-05-12T14:47:37.147 に答える
1

呼び出し:

Element * element = new Element;

後で必要になるヒープ上の要素へのポインターを提供しますdelete。this のメンバーは で使用できますelement->my_member

カリング:

Element element;削除する必要のないスタック上にオブジェクトを作成し、スコープ外になると無効になります。this のメンバーは で使用できますelement.my_member

于 2012-05-12T14:49:20.250 に答える
0

呼び出すnewことにより、スタックではなくヒープメモリにオブジェクトを割り当てています(Element element;たとえば、の場合)。

正しい使い方はElement *element= new Element();

これは複数のオブジェクトにメモリを割り当てません(その場合、あなたは書いたでしょうnew[]

于 2012-05-12T14:48:43.693 に答える