需要"one"对象,如何使用"new"

Need "one" object, how to use "new"

本文关键字:何使用 new 对象 one 需要      更新时间:2023-10-16

我写了;

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;
  };
如果要

分配动态对象,它将是

Element* element = new Element;

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

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

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

Element element;

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

如果你的对象不需要任何参数,你可以做

Element * element=new Element();

如果你的对象需要在构造函数中传递参数,则需要通过创建传递它们

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

调用:

Element * element = new Element;

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

通话:

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

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

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

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