java创建内联对象并作为参数传递
您好,我来自Java,以下内容有效:
System.out.println(new String("Hello World"));
是否有一个C++等价于在构造函数中创建对象或指针,并同时传递它作为一个参数,例如.
heap.insert(new Food);
你可以在下面搜索框中键入要查询的问题!
您好,我来自Java,以下内容有效:
System.out.println(new String("Hello World"));
是否有一个C++等价于在构造函数中创建对象或指针,并同时传递它作为一个参数,例如.
heap.insert(new Food);
# 1 楼答案
你举的例子太简单了
但一般来说,如果你在爪哇讨论匿名类和类似的东西,C++有这种东西,它也有 lambda概念,非常强大;p>
# 2 楼答案
对。您必须定义一个类,一个接受参数的构造函数,然后是一个接受该类实例的函数,仅此而已
最后,向类定义中添加一个适当的复制构造函数或通过引用传递它
下面是一个例子:
请注意,在这种情况下使用
new
是导致内存泄漏的最简单方法之一,因此请注意# 3 楼答案
本身是有效的C++语法。它构造了
<>但是,当从java转换到C++时,你需要学习的关键根本区别是C++应用程序完全负责管理所有对象的生命周期。在Java中,您不需要考虑它。一旦一个对象不再在任何地方被引用,在某个时候它就会被Java的垃圾收集器破坏Food
类的一个新实例,并将其传递给heap的insert()方法C++使你负责管理每个对象的生命周期。每当应用程序不需要您在此处使用
new
运算符构造的对象时,它应该是delete
d,否则将导致内存泄漏总结如下:
这只是故事的一半。
new
操作符将构造新的类实例,而heap
对象的insert()方法可能以某种方式存储指向新类实例的指针。在某个地方,您迟早需要delete
该类实例# 4 楼答案
如果函数参数是按值或按常量引用,并且您要传递的类型可用于构造对象,则可以直接传递它。例如:
std::string
有一个可以接受字符串文字的构造函数,因此代码会编译,创建一个临时字符串对象,相当于:如果构造函数接受多个参数,则可以直接在函数调用中创建临时对象。例如:
在Java中,使用
new
创建新对象。在C++中,不需要创建{{CD2}}来创建新的对象,并且应该尽可能避免,因为这样会更难避免内存泄漏。这是Java程序员最常见的错误之一此代码完全有效
text
和c
是有效对象此代码也是有效的*。但这需要更多的输入,如果你忘记删除它们,你会得到内存泄漏
*编辑:实际上它不是异常安全的!更应该避免
new
# 5 楼答案
对。比如说
一般来说,对象通常不作为指针提供给方法
如果
heap.insert
采用常量引用:然后您可以将其用于临时或现有的食物参数,例如
甚至在某些情况下