Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在构造函数中初始化堆分配变量_C++ - Fatal编程技术网

C++ 如何在构造函数中初始化堆分配变量

C++ 如何在构造函数中初始化堆分配变量,c++,C++,这是我的“代码”: 现在当然不行了。 如何从构造函数初始化堆变量?(我不想在构造函数中分配heap变量)就像这样: class a{ int *var; public: a(int a):var(new int(5)){}; ~a() { delete var; } } 内存分配需要在构造函数中进行。此外,还需要确保在析构函数中解除分配 注意,没有使用构造函数的参数a。如果您想使用此值初始化类变量a,则应将分配调用更改为newvar(a)

这是我的“代码”:

现在当然不行了。 如何从构造函数初始化堆变量?(我不想在构造函数中分配heap变量)

就像这样:

class a{
    int *var;
public:
    a(int a):var(new int(5)){};
    ~a()
    {
        delete var;
    }
}
内存分配需要在构造函数中进行。此外,还需要确保在析构函数中解除分配

注意,没有使用构造函数的参数
a
。如果您想使用此值初始化类变量
a
,则应将分配调用更改为
newvar(a)

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

class a{
    std::unique_ptr<int> var;
public:
    a(int a): var(std::make_unique<int>(5)){};
    ~a()
    {}
}
a类{
std::唯一的ptr变量;
公众:
a(inta):var(std::make_unique(5)){};
~a()
{}
}
像这样:

class a{
    int *var;
public:
    a(int a):var(new int(5)){};
    ~a()
    {
        delete var;
    }
}
内存分配需要在构造函数中进行。此外,还需要确保在析构函数中解除分配

注意,没有使用构造函数的参数
a
。如果您想使用此值初始化类变量
a
,则应将分配调用更改为
newvar(a)

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

class a{
    std::unique_ptr<int> var;
public:
    a(int a): var(std::make_unique<int>(5)){};
    ~a()
    {}
}
a类{
std::唯一的ptr变量;
公众:
a(inta):var(std::make_unique(5)){};
~a()
{}
}

为什么构造函数有一个名为
a
的参数?首先,它没有被使用,其次,把它称为类是个坏主意。那么为什么不想在构造函数中分配heap变量呢?为什么要给构造函数分配一个名为
a
的参数呢?首先,它没有被使用,其次,把它称为类是个坏主意。那你为什么不想在构造函数中分配heap变量呢?@AnatolyS-那应该是一个注释,而不是一个编辑。@Smeeheey:好的,但是如果你决定显示std::unique\u ptr,你应该显示一个首选的构造方法。我不反对,否则我会把它改回来。但是你看到了把它公开的感觉有多好吗?:)@AnatolyS-这应该是一个注释,而不是编辑。@Smeeheey:好的,但是如果你决定显示std::unique\u ptr,你应该显示一个首选的构造方法。我不反对,否则我会把它改回去。但是你看到了把它公开的感觉有多好吗?:)