如果我有一个 class Foo
和一个原型(prototype)为 void bar(Foo* foo)
的方法。可以这样做吗:bar(&Foo());
?
我知道它可以编译和工作,但由于我对 C++ 比较陌生,我想知道创建的实例在使用后是否会被正确销毁,或者在这样做时我是否需要担心其他任何事情。
最佳答案
这甚至不是有效的 C++。有些编译器可能很傻,接受了,但他们不应该这样做。您不能使用临时地址。
此限制在 C++ 标准的第 §5.3.1 节中给出:
The result of the unary
&
operator is a pointer to its operand. The operand shall be an lvalue or a qualified-id.
临时对象是纯右值,所以他们的地址不能被占用。
现在,假设您的编译器接受它,指针将在函数调用运行时有效,但仅在它运行时。一旦它返回,临时文件就会被销毁,因此任何仍然存在的指向它的指针(比如,如果函数存储了它)都是无效的。
关于C++:在构造类时将指针传递给类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8380049/