-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 回答