1. 程式人生 > >類和動態記憶體分配雜談

類和動態記憶體分配雜談

看了《C++ Primer Plus》第十二章,總結一下就是,自己的物件要有自己的記憶體,別老想著共享一段記憶體,以避免造成不必要的後序麻煩。尤其是使用new時,應該堅持一new對應一delete,有的時候雖然不是那麼必要,但是還是那句話,避免一些么蛾子。程式設計也就跟做行政一樣了。下面看一段程式碼:

class Cow
{
private:
	char name[20];                                   //小黑牛牛的名字
	char * hobby;                                    //小黑牛牛的業餘愛好
	double dWeight;                                  //小黑牛牛的體重
public:
	Cow();                                           //預設構造器
	Cow(char * nm, char * ho, double wt);
Cow::Cow(char * nm, char * ho, double wt)
{
	strcpy(name,nm);                                 //char * to char[],有空間所以不用new空間
	Cow::hobby = new char[strlen(ho)+1];             //為hobby開闢一段記憶體
	strcpy(hobby,ho);                                //複製內容,深度複製成功
	Cow::dWeight = wt;
	cout << "小黑牛牛" << name << "生成了!!!\n";
}

因為name已經是一個數組了,就有了自己的記憶體因此不用重新開闢記憶體;但是hobby就不一樣了,他只是一個地址,指向一段字串。這個時候得new,為啥呢?因為這樣才有了完全屬於自己指向的字串記憶體,而不用跟別的指標共享一段記憶體了,避免不必要的麻煩!!!

同樣的道理,自己不定義複製建構函式或者是不過載賦值運算子,會出現同樣的共享記憶體的么蛾子,所謂集體負責就是不負責了啊,所以,必須得是一個指標指向一個記憶體,即使記憶體中的資料都是一樣的,這樣才能做到單獨負責。