我試圖讓我的頭繞着指針/破壞等。我使用下面的代碼來使用指針而不是標準的int;然而,如果我在構造函數中使用初始化列表,它將不會編譯,而如果我只是在構造函數方法中分配它,它工作正常。是否有可能在初始化列表中使用推理指針
#include<iostream>
using namespace std;
class Point
{
private:
int *x;
int y;
public:
Point(int x1, int y1):*x(x1),y(y1) {}
// Copy constructor
Point(const Point &p2) {*x = *p2.x; y = p2.y; }
// ~Point(){delete x;}
int getX() { return *x; }
int getY() { return y; }
void setX(int x1){*x=x1;}
};
int main()
{
Point p1(10, 15); // Normal constructor is called here
Point p2 = p1; // Copy constructor is called here
p2.setX(35);
// Let us access values assigned by constructors
cout << "p1.x = " << p1.getX() << ", p1.y = " << p1.getY();
cout << "\np2.x = " << p2.getX() << ", p2.y = " << p2.getY();
return 0;
}
我也有一個第二個問題,這是initize一個INT指針這樣的正確方法:
int *p = new int;
*p = 3;
或像這樣:
int *p;
*p = 3;
我發現,如果我給你nullptr或0並嘗試顯示指針,它不輸出任何內容是否有這個原因?例如:
int *p = 0;
*p = 3;
cout << *p;
你永遠不會使指針'點:: x'點任何地方,所以每次嘗試解除引用時,都會有*未定義的行爲*。另外,'0'是*空指針*並且不是有效地址,試圖取消引用空指針也會導致未定義的行爲。 –