在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();
这也将避免内存泄漏。