-1

Java您可以调用类方法而不用类的实例创建变量,并且仍然调用该类方法:

new Database().GetSomeValuesOutOfSomeTableJava();

如果我尝试相同的操作,C++则会收到错误消息:

new Database()->GetSomeValuesOutOfSomeTableCpp();

我做错了吗?我怎样才能达到相同的结果?

4

2 回答 2

9
new Database().GetSomeValuesOutOfSomeTableJava();

确实创建了一个实例(注意new);然后它放弃它以供垃圾收集器清理。

在 C++ 中,您可以创建一个临时对象,而无需new

Database().GetSomeValuesOutOfSomeTableCpp();

这将与 Java 示例执行相同的操作,除了临时将在此语句结束时确定性地销毁。

你是否应该创造这样的临时工是另一回事。

于 2013-09-04T19:43:03.267 回答
6

你会这样做:

(new Database())->GetSomeValuesOutOfSomeTableCpp();

但是你会泄漏内存,所以这是一个非常糟糕的主意。另外,请注意,这(在 C++ 和 Java 中)确实创建了一个新实例。它只是一个未存储在变量中的新实例。

更好的版本可能是这样的:

{
    Database temporary;
    temporary.GetSomeValuesOutOfSomeTableCpp();
}

使用 RAII 来初始化和正确销毁临时文件,并确定它的存在时间不会超过您希望的时间,并弄乱以后的任何范围。

或者,正如 Mike Seymour 所指出的,您可以这样做:

Database().GetSomeValuesOutOfSomeTableCpp();

这也将避免内存泄漏。

于 2013-09-04T19:35:02.563 回答