c++ - C++ 对象的构造函数

标签 c++ dynamic-memory-allocation

我有如下类 Person :

class Person {   
    char* name;
    int age;
};

现在我需要添加两个构造函数。一种不带参数,将字段值插入到动态分配的资源中。第二个采用由初始化列表初始化的 (char*, int) 参数。最后一部分是定义一个析构函数,显示有关销毁对象和释放动态分配资源的信息。如何执行此任务?

这就是我已经拥有的:

class Person {   
    char* name;
    int age;
public:
    Person(){
        this->name = new *char;
        this->age = new int;
    }

    Person(char* c, int i){
    }
};

最佳答案

在默认构造函数中,char 数组的分配应包括其所需的大小,例如

this->name = new char[32];

请注意,此大小包括终止字符 0,因此您可以在此数组中存储的名称的有效长度为 31。

在参数化构造函数中,您可以简单地将给定参数分配给您的类成员。

在析构函数中,您需要释放动态分配的资源 - 确保使用 delete[]何时且仅何时释放使用 new[] 分配的内存:

~Person(){
    std::cout << "Destroying resources" << std::endl;
    delete[] name;
    delete age;
}

更新:我错过了这个:如果你想分配 age动态地,您应该将其声明为 int* age .

我假设这个练习的重点是练习动态分配/解除分配;在这种情况下,这很好。但是,一般来说,动态分配 int 并不是好的做法。 s,而不是 char*你应该几乎总是使用 std::string ,自动安全地为您处理内存分配。

关于c++ - C++ 对象的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2856156/

相关文章:

C++ fwrite 缓冲垫字符串

python - 从 C++ 检索 Python 类型

c++ - 为什么我们使用指针而不是简单地创建特定大小的数组?

c - 使用 fgets + 动态内存分配

c - 我如何在C中创建动态分配的数组

c - 在 C 中,如何为我的结构分配空间?

c++ - 通过指针后结果的变化

c++ - 模板中显式参数的转换

c++ - 用于 C++ 开发的 EMACS - CEDET 代码完成和项目问题

c++ - 静态和动态分配内存寻址?