gpt4 book ai didi

c++ - 继承内存管理管理

转载 作者:行者123 更新时间:2023-11-30 01:56:48 24 4
gpt4 key购买 nike

class base
{
public:
base() : buffer(NULL) {}
private:
unsigned char * buffer;
};

class msgA : public base
{
public:
msgA()
{
//alocate memory for buffer size X
this->buffer = new (std::nothrow) unsigned char[A_MSG_SIZE]; // A_MSG_SIZE = 20
}
};

class msgA2 : public msgA
{
msgA2()
{
//alocate memory for buffer size X2
this->buffer = new (std::nothrow) unsigned char[A2_MSG_SIZE]; // A2_MSG_SIZE = 30
}
};
  1. msgA2 构造函数中是否存在内存泄漏?
  2. 在不引起任何问题的情况下最好的设计方法是什么?

我是否应该删除缓冲区然后在类 msgA2 中分配一个新缓冲区,因为之前调用了 msgA 构造函数

编辑:有一个析构函数delete[]

我在构造函数中添加了以下内容

if(this->buffer != NULL)
{
delete [] this->buffer ;
this->pMsgBuffer = NULL;
}

最佳答案

您可以让 base 分配内存,将缓冲区大小作为参数传递给构造函数。有点像

class base
{
protected:
base(size_t size) { /* allocate */ }
unsigned char * buffer;
};

class msgA : public base
{
public:
msgA() : base(X)
{
}
protected:
msgA(size_t size) : base(size)
{
}
};

class msgA2 : public msgA
{
public:
msgA2() : msgA(X2)
{
}
};

这样你就可以让 base 管理内存(并在析构函数中删除缓冲区)。

关于c++ - 继承内存管理管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19434386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com