首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在类中声明动态数组(无符号字符和结构)的C++?

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

Stack Overflow用户
提问于 2013-03-23 04:56:01
回答 1查看 1.1K关注 0票数 0

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

代码语言:javascript
复制
#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)?我知道这将是非常危险的--考虑深度复制等等:

代码语言:javascript
复制
this->Array = new unsigned char[ in_BedRoomCount ];
this->People = new PEOPLE[ in_PeopleCount ];

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

代码语言:javascript
复制
~c_House() { delete[] this->Array; };

结构数组怎么样?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-23 04:58:18

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

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

一个不相关的问题:包含前导下划线或任何位置的双下划线的名称都是为实现保留的。所以你不应该给你的变量命名,比如in__PeopleCount

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15579709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档