我对C ++相当陌生,对此感到疑惑:
假设我需要创建一个类X的对象x,并调用其函数foo(),该函数返回类型Y的对象y。获得y之后,就不再需要x了。
当前,我做这样的事情:(假设a和b是X的构造函数的参数)
X x(a,b);
Y y = x.foo();
Run Code Online (Sandbox Code Playgroud)
但是,对于可读性问题,我想单行执行这些操作。同样,名称x乱七八糟也没有意义。
我的本机编程语言是Java,我将在其中执行以下操作:
Y y = (new X(a,b)).foo();
Run Code Online (Sandbox Code Playgroud)
对于这个基本问题,我深表歉意,但我的搜索没有任何结果,因为大多数搜索结果都返回有关C ++内联关键字的结果,而这与问题无关。
C++ 默认使用堆栈分配。这意味着您不必使用 new,因为变量不是指针。要解决您的问题,只需删除new.
Y y = X( a, b ).foo();
Run Code Online (Sandbox Code Playgroud)
X( a , b )是对 的构造函数的调用X,并.foo()调用构造函数foo返回的右值的成员函数。
请注意,C++ 变量的生命周期与变量的作用域相关联。这意味着变量在声明时初始化,并在程序超出其作用域时销毁。
这意味着(在您的代码中)构造函数调用创建的右值的范围仅X(a , b )是该句子 ( Y y = X( a, b ).foo();),因此该值在该句子结束后被销毁。这就是为什么通常以这种方式调用 ctors 是一种不好的做法。