gpt4 book ai didi

C++ 在类中声明动态数组(无符号字符和结构)?

转载 作者:行者123 更新时间:2023-11-28 03:20:32 25 4
gpt4 key购买 nike

在类中声明动态结构和无符号字符数组的正确方法是什么?

#define GENDER_MALE 0
#define GENDER_FEMALE 1

class c_House {
public:
c_House();

c_House( unsigned int in_BedRoomCount,
short in_FloorCount,
const char* in_Address,
unsigned int in_PeopleCount ) :
BedRoomCount( in_BedRoomCount ),
FloorCount( in_FloorCount ),
Address( in_Address ),
PeopleCount( in_PeopleCount )
{
this->Array = new unsigned char[ in_BedRoomCount ];
this->People = new PEOPLE[ in_PeopleCount ];
};
~c_House() { delete[] this->Array; };
// PROPERTIES
private:
struct PERSON {
unsigned short Age;
const char* Name;
unsigned short Gender;
};
unsigned int BedRoomCount;
short FloorCount;
const char* Address;
unsigned char* Array;
unsigned int PeopleCount;
PERSON *People;

// ACTIONS
private:
void OpenGarage( bool in_Open );
void Vacuum();
};

我应该如何声明动态数组(int 和 struct)?我知道这将是非常危险的——考虑深拷贝等等:

this->Array = new unsigned char[ in_BedRoomCount ];
this->People = new PEOPLE[ in_PeopleCount ];

这是删除 int 数组的正确方法吗?

~c_House() { delete[] this->Array; };

结构数组怎么样?

最佳答案

正确的方法是使用std::string而不是 char 的动态数组, 和 std::vector<PERSON>而不是 PERSON 的动态数组.

如果你在一个类中有动态和手动分配数据,你必须确保你遵循the rule of three ,即实现复制构造函数、赋值运算符和析构函数来执行数据的“深拷贝”。这是为了确保您的类的每个实例都拥有其动态分配的数据,并使复制和分配安全。在 C++11 中,这被推广到五规则

一个不相关的问题:包含前导下划线或双下划线的名称保留用于实现。所以你不应该给你的变量名称,如 in__PeopleCount .

关于C++ 在类中声明动态数组(无符号字符和结构)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15579709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com