c ++使用匿名对象调用函数会导致编译器错误

Des*_*tor 2 c++ new-operator

为什么以下程序在编译时失败.

#include <iostream>
using namespace std;
class Test
{
    public:
    void fun()
    {
        cout<<"fun() in Test\n";
    }
};
int main() {
    new Test()->fun();
    // your code goes here
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

访问此链接:http://ideone.com/qtCufW

允许在Java和C#中使用匿名对象调用成员方法,但为什么不允许在C++中使用?请帮我.

Mik*_*our 11

要修复语法错误,请将new-expression括起来

(new Test())->fun();
Run Code Online (Sandbox Code Playgroud)

因为new->运算符的优先级意味着你的解析为

new (Test()->fun());
Run Code Online (Sandbox Code Playgroud)

这是不正确的.

要修复内存泄漏,请停止使用new.你不再编写Java或C#了.

Test().fun();
Run Code Online (Sandbox Code Playgroud)