c++ - 什么时候使用引用成员?

标签 c++ reference member

我刚刚意识到我什至无法弄清楚 C++ 中引用成员的一个用例。比如说,如果我定义以下类:

class Book {
   public:
       Book(const Author& author) : author(author) {}
   private:
       const Author &author;
}

我怎么能用它呢?如果我将 newed 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/

相关文章:

c++ - boost同步服务器客户端编译报错

C++,cin如何从输入缓冲区读取?

c++ - 谁在这里? g++ 还是 Visual Studio 2017?

c++ - 关于 C++ OOP 数组成员复制行为

c++ - 如何从包 (RCpp) 内的 R 脚本调用 C++ 函数?

c++ - 链表错误

C++ 引用与局部变量

arrays - 如何循环遍历数组作为引用?

C++(非内置/类)静态成员

C++ 为成员容器中的项调用for_each中的成员函数