我刚刚意识到我什至无法弄清楚 C++ 中引用成员的一个用例。比如说,如果我定义以下类:
class Book {
public:
Book(const Author& author) : author(author) {}
private:
const Author &author;
}
我怎么能用它呢?如果我将 new
ed Author
传递给它:
Book book(*(new Author()));
它不会泄漏内存吗? Author
什么时候发布?
让我再试一次。如何将局部变量传递给它:
Book macBook() {
Author author();
return Book(author);
}
返回的 Book 没有无效(已发布)引用吗?
想不到第三种使用方式。那么为什么引用成员存在呢?我应该什么时候使用它?
编辑:我知道有share_ptr
。但是我应该总是更喜欢 share_ptr
来引用吗?
最佳答案
您必须确保作者的生命周期至少与本书一样长(或者至少要非常小心,不要在作者生命周期之外使用本书的引用文献)。确保这一点的一种简单方法是将它们放在相同的范围内,首先创建作者:
Author author;
Book book(author);
正如您所说,问题中的两个示例都不好:第一个泄漏内存(或者,如果您添加 *
使其编译),第二个让您悬空引用。但是还有很多其他方法可以管理对象的生命周期。
关于c++ - 什么时候使用引用成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19587780/