下面的這段代碼工作正常。在構造函數和析構函數爲什麼我必須將指針初始化爲變量?
#include <iostream>
using namespace std;
class CRectangle {
int *width, *height;
public:
CRectangle (int,int);
~CRectangle();
int area() {return (*width * *height);}
};
CRectangle::CRectangle (int a, int b) {
width = new int;
height = new int;
*width = a;
*height = b;
}
CRectangle::~CRectangle() {
delete width;
delete height;
}
int main() {
CRectangle rect (3,4), rectb (5,6);
cout << "rect area: " << rect.area() << endl;
cout << "rectb area: " << rectb.area() << endl;
return 0;
}
但爲什麼我不能用另一塊下面的代碼,而不是 //例子嗎?它沒有通過使用下面的代碼編譯,但如果我強制運行它仍然會產生正確的結果。
#include <iostream>
using namespace std;
class CRectangle {
//here I didn't initialize these two variables' pointers.
int width, height;
public:
CRectangle (int a,int b);
~CRectangle();
int area() {
return (width * height);
}
};
CRectangle::CRectangle (int a, int b) {
width = a;
height = b;
}
CRectangle::~CRectangle() {
}
int main() {
CRectangle rect (3,4), rectb (5,6);
cout << "rect area: " << rect.area() << endl;
cout << "rectb area: " << rectb.area() << endl;
return 0;
}
您無法強制未編譯的代碼運行。你確定你沒有運行最後的成功構建? – chris
'width'和'height'不是指針,所以你應該直接將它們相乘,而不是取消引用它們。你不能刪除它們,因爲你從來沒有分配過它們。 – Barmar
@Barmar說是最正確的做法,而不是第一個。 – chris