我写道;
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;
};
答案 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[]
)