需要“一个”对象,如何使用“新”

时间:2012-05-12 14:45:05

标签: c++ new-operator

我写道;

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

我不想要指针或元素数组

Altough我应该写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 个答案:

答案 0 :(得分:7)

如果要分配动态对象,则为

Element* element = new Element;

因为new返回指向免费商店中对象的指针。完成使用对象以防止内存泄漏后,必须调用delete element。如果您想避免手动管理内存,可以使用std::unique_ptr

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

element超出范围时,delete将自动调用指针Element element; 。但是,您确定不想只创建一个自动对象吗?

Element element();

这会在自动存储中创建对象,您不必手动释放它使用智能指针,而且速度要快得多;这是最好的方式。 (但请确保您不执行{{1}}这是函数的原型,而不是变量声明。)

答案 1 :(得分:1)

如果您的对象不需要任何参数,则可以执行

Element * element=new Element();

如果您的对象需要构造函数中的参数,则需要通过创建

传递
Element * element=new Element(argument1, argument2);

答案 2 :(得分:1)

通话:

Element * element = new Element;

将为您提供指向堆上的元素的指针,稍后您需要delete。您可以将此成员与element->my_member

一起使用

Caling:

Element element;将在堆栈上创建一个不需要删除的对象,当它超出范围时将失效。您可以将此成员与element.my_member

一起使用

答案 3 :(得分:0)

通过调用new,您将在堆内存中分配一个对象,而不是在堆栈中(例如,在Element element;的情况下)。

正确的方法是使用Element *element= new Element();

这不会为多个对象分配内存(在这种情况下,您编写了new[]