在Java
中,您可以调用类方法,而无需使用类的实例创建变量,并仍然调用该类方法:
new Database().GetSomeValuesOutOfSomeTableJava();
如果我对C++
尝试相同的操作,则会收到错误消息:
new Database()->GetSomeValuesOutOfSomeTableCpp();
我做错了吗?我怎样才能达到同样的效果?
答案 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();
这也可以避免内存泄漏。