我有一個類在構造函數的堆中聲明的private
成員。然後,在析構函數中,它是delete
ed。現在,我想添加一個方法來修改該變量。我希望能夠使用引用,但我不確定涉及的內存的具體情況,並且我想知道我正確地執行了該操作(該項目在內存部門中可能相當大)。參數:他們在哪裏申報?
class A
{
private: std::string str;
/* ... */
public:
A()
{
str = new std::string("");
}
~A(){delete str;}
// method to modify str.
};
如果我通過引用傳遞,我應該採取什麼步驟,消除內存泄漏和減少內存使用情況?話雖如此,我並不想成爲所有優化的積極分子。
我應該如何爲堆上的成員編寫我的getter和setter?複製構造函數,別的東西?
請注意,類std :: string已經執行它自己的內存管理,其中包括封裝複製構造函數,移動構造函數和賦值運算符。當你聚合一個已經擁有這個類的類時,你沒有必要再做一次。 –
因此,如果在你的情況下,被聚合的類(私有成員)有它自己的內存管理(如std :: string那樣),而不要在堆上分配它。如果你關心在你的頭文件中需要很多依賴,這可能是使用堆的原因,那麼請使用pimpl_成語。 –
在絕對需要它之前,不要使用指針和堆分配。 – Raja