class A
{
public:
A(){ val = 0; p = new int; *p = 0; }
//void fun_1()const{ val = 1; } not allowed
void fun_2()const{ *p = 1; }
void display()const{ cout<< val <<' '<< *p <<endl; }
private:
int val;
int * p;
};
int main()
{
const A a;
a.fun_2();
}
更改const成員函數如fun_1()const
中的成員數據是不允許的。但是,當數據不是直接成爲對象的成員,而是分配了存儲並分配給對象時,const函數無法保護它。 fun_2()const
可以更改p
指向的數據,例如它是一個常量函數。在C++中,如果成員指針指向某些數據,如何保護該數據不被修改?
有什麼辦法保護p
指向的數據?
你可以讓它變成一個'const int的*'(或更好的,一個'常量的std ::的unique_ptr') 。 –
chris
@chris一個'std :: unique_ptr'?或者真的是一個'const std :: unique_ptr '? (注意'operator *'等是const成員函數) –
dyp
您的問題是否可以在const函數中修改* p? IE瀏覽器。你不介意存在,或者你實際上還想成爲,可以在非const方法中改變* p? – Kindread