我想知道如何通过 const 方法保护非 const 指针成员不受对象影响。例如:
class B{
public:
B(){
this->val=0;
}
void setVal(){
this->val = 2;
}
private:
int val;
};
class A{
public:
A():b(new B){}
void changeMemberFromConstMethod() const{
this->b->setVal();
}
private:
B * b; // how to protect data pointed in A::changeMemberFromConstMethod
}
是否可以“保护”他的方法指向的 A::b 数据? 在网络上进行了大量研究后,尚未找到满意的响应。
感谢您的帮助。
最佳答案
可能是这样的:
template <typename T>
class deep_const_ptr {
T* p_;
public:
deep_const_ptr(T* p) : p_(p);
T* operator->() { return p_;}
const T* operator->() const { return p_;}
};
class A {
deep_const_ptr<B> b = new B;
};
deep_const_ptr
的行为类似于 A
的 const 方法中的 const T* const
指针,并且类似于 T*
在非常量方法中。进一步充实类(class)留给读者作为练习。
关于非 const 指针成员上的 C++ const 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25575973/