rud*_*tti 3 c++ null pointers class
考虑这个课程:
class Packet {
public:
Packet();
~Packet();
void allocateBuffer(unsigned int size);
void deallocateBuffer();
char* getBuffer() const;
private:
char* buffer;
};
Run Code Online (Sandbox Code Playgroud)
使用以下方法:
Packet::Packet():
buffer(NULL) {
std::cout << "[DEBUG] Construct Packet class..." << std::endl;
}
void Packet::allocateBuffer(unsigned int size) {
if (!(buffer)) {
buffer = new char[size];
#ifdef DEBUG
std::cout << "Allocate buffer memory..." << std::endl;
#endif
}
}
void Packet::deallocateBuffer() {
if (buffer) {
delete[] buffer;
buffer = NULL;
#ifdef DEBUG
std::cout << "Deallocate buffer memory..." << std::endl;
#endif
}
}
Run Code Online (Sandbox Code Playgroud)
以下是一些问题:
NULL它们是否相等,如果它们指向什么,上面列出的实现是否是处理类内指针的好方法?我要求这样做,因为如果buffer变量未在构造函数中初始化,\v则默认情况下似乎会为其分配一个奇怪的值.
- 因为在C指针中如果它们指向什么都不等于NULL,上面列出的实现是否是处理类内指针的好方法?我要求这样做,因为如果缓冲区变量没有在构造函数中初始化,默认情况下似乎会为它分配一个奇怪的\ v值.
您应该始终在类构造函数中处理非静态成员变量的初始化,除非这些是非基本类型,并且这些变量本身会处理它们的初始化.
访问它们会暴露未定义的行为.
您应该注意,非静态类成员变量没有默认初始化.
使用c ++也应该使用nullptr而不是NULL初始化原始指针.
- 如果没有,你能建议更优雅的方法吗?
当然,只需使用一个std::vector<char>成员变量,它将自动为您执行所有分配/释放内存管理.
要通过原始指针访问原始数据,请使用std::vector::data()函数重载.
正如您在评论中提到的,您必须处理TCP/IP低级API 1,我建议您使用a std::vector<uint8_t>进行缓冲,因为您无法确定是否只会char传输有效的已识别值.
1)处理通过线路发送的数据时,请注意机器端点中立性,尤其是在发送和接收数据包大小时.该htonx()/ntohx()函数族就派上用场了正确做到这一点.
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |