这是我的"代码":
class a{
int *var=new int;
public:
a(int i):*var(5){};
~a(){}
};
现在当然这不起作用。 如何从构造函数初始化堆变量? (我不想在构造函数中分配堆变量)
答案 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()
{}
}