我们有一个大型 C++ 实时程序,它使用char str[500]
不同大小的缓冲区(例如 )来存储字符串。
由于我们过去有一些内存泄漏,我们想用一个MyString
类包装字符串,该类将使用缓冲区和大小进行初始化。
问题是如何有效和轻松地同时分配缓冲区和包装器,同时保持缓冲区作为类的一部分分配,而不是从堆中分配(参见下一个示例)。
我尝试以下列方式使用模板:
template <unsigned int N>
class BufferString : public MyString
{
public:
BufferString() : MyString(m_buf, N) { }
char m_buf[N];
};
所以它可以分配为类成员或自动变量:
class SomeClass
{
BufferString<500> m_str; // Need the buffer to be allocated in SomeClass
};
void foo()
{
BufferString<350> str; // Need the buffer to be allocated on the stack
}
但是,使用此解决方案,可执行文件的大小会急剧增长,每个模板实例化大约 1kB(可能是由于构造函数的编译)。
有一个更好的方法吗?
谢谢。
编辑:我找到了一个类似于我提出的解决方案的实现fixed_char_buf
(由 John Panzer,在此处找到)。
此方法的另一种实现和推理可在此处找到。