我們有不同的大小的大的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
提出的解決方案的實現(由約翰裝甲,發現here)。
另一種實現和推理這種方法發現here。
你就不能使用'標準:: string'? – 2012-07-11 11:41:54
在編寫時,不要將您的實現適應於任何內存泄漏問題。首先解決內存泄漏問題,然後充分利用動態內存分配。 – 2012-07-11 11:43:19
爲什麼不能在堆上分配有什麼特殊要求?您提供的解決方案是IMO唯一能夠在堆棧上分配的解決方案。那麼你必須忍受大小的缺陷。 – Paranaix 2012-07-11 11:44:33