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

How to call a class method without creating an instance

本文关键字:情况下 调用 类方法 实例 创建      更新时间:2023-10-16

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

new Database().GetSomeValuesOutOfSomeTableJava();

如果我尝试对C++执行相同的操作,则会出现错误:

new Database()->GetSomeValuesOutOfSomeTableCpp();

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

new Database().GetSomeValuesOutOfSomeTableJava();

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

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

Database().GetSomeValuesOutOfSomeTableCpp();

这将执行与 Java 示例相同的操作,只是临时将在此语句末尾确定性地销毁。

是否应该创建这样的临时是另一回事。

你会这样做:

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

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

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

{
    Database temporary;
    temporary.GetSomeValuesOutOfSomeTableCpp();
}

使用 RAII 初始化并正确销毁临时,并使用范围来确保它存在的时间不会超过您希望的时间,并搞砸以后的任何范围。

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

Database().GetSomeValuesOutOfSomeTableCpp();

这也将避免内存泄漏。