C++ C++;在类中声明动态数组(无符号字符和结构)?
在类中声明动态结构和无符号字符数组的正确方法是什么C++ C++;在类中声明动态数组(无符号字符和结构)?,c++,C++,在类中声明动态结构和无符号字符数组的正确方法是什么 #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,
#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
的动态数组
如果在类中动态和手动分配了数据,则必须确保遵循,即实现复制构造函数、赋值运算符和析构函数来执行数据的“深度复制”。这是为了确保类的每个实例都拥有其动态分配的数据,并确保复制和分配安全。在C++11中,这被推广到五的规则
一个不相关的问题:包含前导下划线或任意双下划线的名称是为实现保留的。因此,您不应该在PeopleCount中为变量命名,例如
所有带有两个相邻下划线的标识符都是保留的。正确的方法是使用标准容器,它已经解决了问题。是否有特定的原因不能使用std::vector
或std::array
?是的,但这并不意味着初学者不应该尝试理解string
和vector
如何做他们的事情,即。,为什么一开始它们是一个更好的选择。@EdS。这是正确的,但是没有必要创建包含许多数据成员和嵌套结构的类来了解这一点。这里的问题是“如何管理动态分配的数据”。答案应该是“这就是…现在使用这些库类型来代替它”我不认为这是一个错误的答案,“在类中声明动态结构和无符号字符数组的正确方法是什么”,答案“std::string和std::vector”是有效的。@CLearner这个答案是正确的。它实际上经常用于数据成员。