如何在构造函数中初始化堆分配的varible

时间:2016-06-23 09:41:38

标签: c++

这是我的"代码":

class a{
    int *var=new int;
public:
    a(int i):*var(5){};
    ~a(){}
};

现在当然这不起作用。 如何从构造函数初始化堆变量? (我不想在构造函数中分配堆变量)

1 个答案:

答案 0 :(得分:4)

像这样:

class a{
    int *var;
public:
    a(int a):var(new int(5)){};
    ~a()
    {
        delete var;
    }
}

内存分配需要在构造函数中进行。此外,您需要确保在析构函数中解除分配。

请注意,未使用构造函数的参数a。如果您要使用此值初始化类变量a,则应将分配调用更改为new var(a)

注意2:除非您特别需要手动管理内存(比如练习),否则更好的设计是使用智能指针,例如:

class a{
    std::unique_ptr<int> var;
public:
    a(int a): var(std::make_unique<int>(5)){};
    ~a()
    {}
}