假设我有以下课程:
#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
}
如您所见,
aClassB
在ClassA
中不是const。关于c++ - 使用带有智能指针的 setter/getter ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33693850/