所以我希望在我的班级中有一个常量指针作为字段,因为它必须始终指向第一个单元格。问题是我不能这样做,因为我在构造函数中分配内存。我正在考虑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);
}
答案 0 :(得分:2)
我在考虑inicialization list但是分配的内存取决于参数的大小;
这并不能阻止你:
Package::Package(PackInfo pckInfo, Data data):
headerSize(sizeof(pckInfo)),
sizeOfData(data.GetDataSize()),
pack(new char[this->sizeOfData + this->headerSize]())
{
// …
}
确保在类定义中headerSize
之前声明sizeOfData
和pack
:成员初始化顺序与类主体中的声明顺序相同。
答案 1 :(得分:0)
要在构造函数中初始化常量,请使用成员初始化列表,例如
Package::Package(PackInfo pckInfo, Data data)
: pack = new char[required_size_here]
{
//... as you were
}
在使用之前,您需要确保已设置尺寸。留给读者练习。