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

标签 c++ pointers constructor

如果我有一个 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/

相关文章:

c++ - 即使未找到 DLL 也启动应用程序?

c++ - 为什么 GCC 6 假设数据是 16 字节对齐的?

c++ - 在 C++ 中使用指针 vector 时会泄漏内存吗?

constructor - 如何在 Flutter 中更改 slider 标签颜色?

c++ - "error: no matching function for call to"构造函数错误

java - Java 子类中的构造函数不正确

c++ - 在 Ubuntu 上运行 Qt 创建的可执行文件时出错

objective-c - 基本的 Objective-C 指针问题

c - 如何通过函数修改指向 void 的指针?

java - Java 中的 char** 等价物