"A = Obj()"和"A = new Obj()"有什么区别
What's the difference between "A = Obj()" and "A = new Obj()"
我对这两种不同的方式感到困惑,我发现它们在vs中都是可以的。你能告诉我区别的本质吗?
第一个创建一个默认构造的临时对象,并使用复制构造函数(如果赋值在A
的声明中)或复制赋值操作符从临时对象复制到A
。然后销毁临时对象。
第二个函数在堆上创建一个默认构造的对象,并返回一个指向这个新对象的指针。您必须稍后delete
这个对象,否则您将有内存泄漏。
在这种理解水平上,我能给你的最好建议是远离new
。您稍后将需要它来完成更复杂的任务,但不要让事实(例如,Java也有new
)欺骗了您。在c++中,new
打开了一个在其他语言中不存在的问题的世界。有人可能会说,在不同的语言中,关键字是相同的,这很不幸……:)
new
意味着,当你不再需要时,你创建的对象将不会自动从内存中删除。你必须通过指针来记住它在内存中的位置,而指针是一个很容易被滥用的危险工具,尤其是对于没有经验的程序员。
void f()
{
Obj *a = new Obj();
// no automatic destruction, the object remains in memory!
}
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 警告处理为错误这里有什么问题
- 什么时候调用组成单元对象的析构函数
- #定义c-预处理器常量..我做错了什么
- 努力将整数转换为链表。不知道我在这里做错了什么
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 什么时候在C++中返回常量引用是个好主意
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- C++避免重复声明的语法是什么
- c++库的公共头文件中应该包含什么
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 是什么导致了代码中出现"error LNK2005: already defined in .obj"错误?
- 汇编TypeID(OBJ)时会发生什么-C
- C++ push_back(*new obj()) 和 push_back(obj()))有什么区别?
- Object obj = Object() 和 Object obj() 有什么区别?
- 我的旧Qt项目文件(.pro文件),它正在工作;不创建任何文件(moc_ 或 .obj 文件)。为什么它退出构建步骤什么都不做?
- 给定一个dll/exe(带或不带.pdb),我可以看到什么.obj文件有助于它的大小和多少
- 目标 c - obj-c 代表模式的C++等价物是什么?
- 在 c++ 中,Obj x = Obj(n) 和 Obj x(n) 有什么区别?
- "A = Obj()"和"A = new Obj()"有什么区别