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

时间:2015-02-05 16:41:23

标签: 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;
}

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

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

1 个答案:

答案 0 :(得分:10)

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

括起来
(new Test())->fun();

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

new (Test()->fun());

这是不正确的。

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

Test().fun();