如何在不创建实例的情况下调用类方法

时间:2013-09-04 19:33:16

标签: c++ oop

Java中,您可以调用类方法,而无需使用类的实例创建变量,并仍然调用该类方法:

new Database().GetSomeValuesOutOfSomeTableJava();

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

new Database()->GetSomeValuesOutOfSomeTableCpp();

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

2 个答案:

答案 0 :(得分:10)

new Database().GetSomeValuesOutOfSomeTableJava();

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

在C ++中,您可以创建一个没有new的临时对象:

Database().GetSomeValuesOutOfSomeTableCpp();

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

是否应创建像这样的临时工具是另一回事。

答案 1 :(得分:6)

你会这样做:

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

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

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

{
    Database temporary;
    temporary.GetSomeValuesOutOfSomeTableCpp();
}

使用RAII初始化并正确销毁临时和范围,以确保它不存在的时间超过你想要的时间并且弄乱任何后来的范围。

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

Database().GetSomeValuesOutOfSomeTableCpp();

这也可以避免内存泄漏。