Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.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++;在类中声明动态数组(无符号字符和结构)?_C++ - Fatal编程技术网

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这个答案是正确的。它实际上经常用于数据成员。