假设我有以下课程:

#include "ClassB.h"
#include <memory>

    class A
    {

      private:
        std::shared_ptr<ClassB> aClassB;

      public:
        ClassA();
        virtual ~ClassA();

        std::shared_ptr<ClassB> getClassB() const{
             return ClassB;
         }
    };


现在,我可以调用ClassA.getClassB()以获得指向成员变量aClassB的智能指针。但是,问题在于我可以使用此智能指针来实际更改我不想要的成员变量aClassB。所以基本上我想实现这样的事情:

std::shared_ptr<const ClassB> getClassB() const{
                 return ClassB;


但是,这不起作用,因为aClassB不是const。我不想在aClassB中使classA成为常量,因为ClassA的成员函数应该能够更新此aClassB成员变量。

关于如何使用其他类中的get函数来获取aClassB的任何建议,但不允许其他类对aClassB进行更改。

最佳答案

您可以返回std::shared_ptr<const ClassB>

//#include "ClassB.h"
struct ClassB
{
    int i = 0;
};

#include <memory>
#include <iostream>

class ClassA
{

private:
    std::shared_ptr<ClassB> aClassB;

public:
    ClassA() :aClassB(new ClassB) { aClassB->i = 1; }
    virtual ~ClassA(){}

    std::shared_ptr<const ClassB> getClassB() const {
        return aClassB;
    }
};

int main()
{
    ClassA a;
    //a.getClassB()->i = 2; //error: you cannot assign to a variable that is const
    std::cout << a.getClassB()->i << std::endl; //Works
}


如您所见,aClassBClassA中不是const。

关于c++ - 使用带有智能指针的 setter/getter ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33693850/

10-11 21:48