需要"one"对象,如何使用"new"
Need "one" object, how to use "new"
我写了;
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[]
)
相关文章:
- 在类c++中使用new声明数组
- 在C++中,如果我可以直接将整数分配给指针而不使用"new",为什么要使用"new"?
- 是否可以使用 new 指定具有宏常量的动态分配数组的元素?
- 使用 new 和 值进行数组初始化,但没有显式数量的元素
- 在 Objective-C++ -> EXC_BAD_ACCESS Error 中使用"new"关键字
- 使用new创建数组而不声明大小
- 删除使用 new 创建的 2D 或 3D 指针
- 如何在不使用new的情况下保持在其他对象中创建的对象存活?
- 如何在C++中使用 new 运算符创建对动态创建的数组的引用?
- 使用new时如何重新分配dyyanmic数组,不使用realloc删除C++?
- 第一次尝试使用new动态创建结构数组,程序挂起没有错误
- 如何在堆上初始化线程?(使用 "new" 关键字)
- 如何在不使用 "new" 关键字的情况下解除分配创建的对象的内存?
- 基类指针:在哪里使用 new 和 delete
- 在C++中,为什么int可以使用new运算符初始化变量,而double不能
- 双指针在使用 new 时不调用对象构造函数
- 使用 'new[]' 运算符分配内存
- 使用 new in C++(在 Windows 上)分配大于 2GB 的单个对象
- C++:为什么可以在没有事先使用 new 的情况下在指向结构的指针上使用 delete?
- 在 new 关键字中,由默认构造函数初始化的类中的元素是否也使用 new 关键字在C++?