指向数组的常量指针作为类字段C ++

时间:2015-12-05 12:22:21

标签: c++ pointers

所以我希望在我的班级中有一个常量指针作为字段,因为它必须始终指向第一个单元格。问题是我不能这样做,因为我在构造函数中分配内存。我正在考虑inicialization列表,但分配的内存取决于参数的大小;在C#中我会使用,只读''。不知道如何在C ++中做到这一点

class Package{
    private: char *const pack ; // <-- here

    public: Package(PackInfo pckInfo, Data file) ;
    public: ~Package();
};

Package::Package(PackInfo pckInfo, Data data){

    this->headerSize = sizeof(pckInfo);
    this->sizeOfData = data.GetDataSize();

    //alocate memory
    this->pack = new char[this->sizeOfData + this->headerSize](); //<- can not be done
    //pointer on the begining of allocated array
    PackInfo *temp = (PackInfo*) this->pack;
    //putting header information in the begining of the array  // moving pointer at cell just after header information
    *temp = pckInfo; temp++; 
    char *packPointer = (char*)temp; 
    //getting data from file direclty into the array
    data.GetCurrentBytes(packPointer);
}

2 个答案:

答案 0 :(得分:2)

  

我在考虑inicialization list但是分配的内存取决于参数的大小;

这并不能阻止你:

Package::Package(PackInfo pckInfo, Data data):
    headerSize(sizeof(pckInfo)),
    sizeOfData(data.GetDataSize()),
    pack(new char[this->sizeOfData + this->headerSize]())
{
    // … 
}

确保在类定义中headerSize之前声明sizeOfDatapack:成员初始化顺序与类主体中的声明顺序相同。

答案 1 :(得分:0)

要在构造函数中初始化常量,请使用成员初始化列表,例如

Package::Package(PackInfo pckInfo, Data data)
    : pack = new char[required_size_here]
{
    //... as you were
}

在使用之前,您需要确保已设置尺寸。留给读者练习。