C++:在构造类时将指针传递给类

nij*_*sen 1 c++ constructor pointers

如果我有一个class Foo和原型的方法void bar(Foo* foo).可以这样做bar(&Foo());吗?

我知道它编译和工作,但由于我对C++比较陌生,我想知道创建的实例在使用后是否会被正确销毁,或者在做这个时我是否还要担心其他任何事情.

R. *_*des 5

那甚至不是有效的C++.有些编译器可能很傻并接受它,但它们不应该这样做.你不能拿一个临时的地址.

此限制在C++标准的第5.3.1节中给出:

一元运算&符的结果是指向其操作数的指针.操作数应为左值或限定ID.

临时护送是prvalues,所以他们不能得到他们的地址.

现在,假设编译器接受了这一点,指针在函数调用运行时有效,但仅在运行时才有效.一旦它返回临时被销毁,所以任何指向它的指针仍然存在(如果函数存储它)是无效的.

  • @nijansen这是早期学习的重要一课,那只是因为编译器允许它并不意味着它是有效的C++. (2认同)