c++ - 使用动态分配的内存来初始化引用成员是否可以?

标签 c++

我是在造成内存泄漏还是可以这样做?我应该使用智能指针成员而不是引用吗?

class A
{
public:

   A() : b_(*(new B))
   {}

private:
   B& b_;
};

int main()
{
    A a;
    return 0;
}

最佳答案

你肯定在泄漏内存;每个 new 都需要与 delete 匹配。

除非有充分的理由动态分配它,否则最好让 b_ 成为一个对象。否则,按照您的建议使用智能指针,或(不推荐)在析构函数中删除它,记住使复制构造函数和复制赋值行为正确。在最后一种情况下,它是一个引用而不是一个指针是有效的(但有点不寻常)。

决定实际上取决于您希望类在复制时如何表现。在第一种情况下,它将复制整个对象;第二,它将按照智能指针定义的方式运行;在第三种情况下,它将按照您实现的复制构造函数/赋值的定义运行。

关于c++ - 使用动态分配的内存来初始化引用成员是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3524108/

相关文章:

c++ - 按 C++ 键时随时调用函数

c++ - 混合 C 和 C++ 的线程同步

c++ - Unittest++:测试多个可能值

c++ STL排序使用我的定义函数错误

c++ - 绑定(bind)重载函数

c++ - 匿名结构作为返回类型

c++ - 如何使用SD总线获取服务状态?

c++ - 如何将 cstring 复制到构造函数初始化列表中的成员变量?

c++ - 为什么我们在 C++ 中使用 std::function 而不是原来的 C 函数指针?

c++ - OpenGL - 深度缓冲区在渲染半透明立方体时切出不应该的面