我有一個關於良好C++風格的問題: 我想寫一個類「MyClass」,它有一個或一些指針作爲成員,MyClass能夠分配內存到這個指針。我想使用隱式賦予的默認複製構造函數(以及默認的assignement運算符)來複制MyClass的實例,以便只複製指針並且新對象共享初始對象所擁有的數據分配。記住只能管理共享內存的原始對象
我的想法是禁止複製的對象(與拷貝構造函數或賦值操作符創建)來釋放內存(以及分配內存以成員指針)。爲了複製的對象和原始對象(通過構造函數創建的)之間distinguesh,我想用下面的代碼:
class MyClass
{
public:
MyClass(): originalPtr(this) { data = new char[100000]; }
~MyClass() { if(originalPtr == this) delete[] data; }
private:
MyClass *originalPtr;
char *data; // shared data (not copiable)
char otherFeatures[10]; // individual data (copiable)
};
將會對這種解決(使用與this
終場前的比較)的好作風這種一個目的(例如通過值調用來解析一個對象)還是有風險的?當然,我認爲原始對象的存在時間通常比複製的對象長。
謝謝!
如果原始文件總是比副本壽命更長,爲什麼要複製而不是分發引用? –
爲了提供副本的個人數據(由「otherFeatures」暗示)。 –
爲什麼不使用'shared_ptr'或類似的東西? – Petr