非 const 指针成员上的 C++ const 方法

标签 c++ pointers object methods constants

我想知道如何通过 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/

相关文章:

Objective-C 指针值

python - 返回变量并分配属性

Javascript 对象合并

c++ - 数组题(作业)

c++ - `enable_if` 使编译器难以生成可读的错误消息呢?

c++ - 函数总是输出错误的区域

c++ - 初学者 : first program for Circular Singly Linked List,

C - 拆分降低了我的计算机速度

c - 为什么我可以通过指针转换更改局部 const 变量而不是 C 中的全局变量?

java - Java 中奇怪的对象/类行为