【问题标题】:C++ class member allocationC++ 类成员分配
【发布时间】:2011-10-22 13:31:02
【问题描述】:

假设我有这个:

class foo{
    Member member;
    foo();
    ~foo();
};

我应该如何分配成员?

编辑:我应该如何告诉他使用哪个构造函数?(抱歉不清楚)

现在我已经知道member = Member(...); 语法了

这会导致内存泄漏吗?

{
    Memory *temp = new Member();
    member = *(temp);   //will it work at all??(is it copy constructor?)
    delete temp;
}

【问题讨论】:

  • 我已经发现我应该使用 memory = Member();没有新的..还是谢谢

标签: c++ class memory-management


【解决方案1】:

C++ 不是 Java。该成员已分配。它是它所在实例的内存的一部分。它将由包含实例的构造函数构造(初始化)。关键字new与不是指针的成员无关。

【讨论】:

  • 值得注意的是,在堆上分配成员然后分配给成员的模式实际上可能导致内存泄漏。如果复制赋值运算符抛出异常,它将泄漏temp
【解决方案2】:

假设 Member 不是指针类型的 typedef,即它的 not 定义为,比如说,

typedef int* Member;

您无需执行任何操作来分配它,因为它会在您分配 foo 的实例时自动分配。

【讨论】:

    【解决方案3】:

    编辑:我应该如何告诉他使用哪个构造函数?(抱歉不清楚)

    像这样:

    foo::foo() : member(...) // member initializer list
    {
    }
    

    【讨论】:

      【解决方案4】:

      我应该如何告诉他使用哪个构造函数?

      Member member 在类声明中还没有调用任何构造函数,因为它只是声明。但是,当您稍后定义它时,您应该使用member()membermember(arg,..) 来定义成员对象并调用某个构造函数。

      代码很好,可以正常工作。请注意,它将调用赋值运算符而不是复制构造函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-03-22
        • 1970-01-01
        • 1970-01-01
        • 2012-07-21
        • 1970-01-01
        • 2023-04-02
        • 2014-01-12
        相关资源
        最近更新 更多