nij*_*sen 1 c++ constructor pointers
如果我有一个class Foo和原型的方法void bar(Foo* foo).可以这样做bar(&Foo());吗?
我知道它编译和工作,但由于我对C++比较陌生,我想知道创建的实例在使用后是否会被正确销毁,或者在做这个时我是否还要担心其他任何事情.
那甚至不是有效的C++.有些编译器可能很傻并接受它,但它们不应该这样做.你不能拿一个临时的地址.
此限制在C++标准的第5.3.1节中给出:
一元运算
&符的结果是指向其操作数的指针.操作数应为左值或限定ID.
临时护送是prvalues,所以他们不能得到他们的地址.
现在,假设编译器接受了这一点,指针在函数调用运行时有效,但仅在运行时才有效.一旦它返回临时被销毁,所以任何指向它的指针仍然存在(如果函数存储它)是无效的.