假设我有以下课程:
$aws/things/<gateway_id>/shadow/get/accepted
现在我可以调用thing shadow
来获取指向成员变量?- sat((P+Q) * ~P).
P = 0, Q = 1. % succeeds deterministically
的智能指针。但是,问题是我可以使用这个智能指针实际更改成员变量#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成员变量。
有关如何使用其他类中的get函数获取aClassB
的任何建议,但不允许对其他类中的classA
进行更改。
答案 0 :(得分:1)
您可以返回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
不是常量。
答案 1 :(得分:0)
我会尝试返回一个`const ClassB&amp;:
const ClassB& getClassB() const {
return *aClassB;
}
答案 2 :(得分:0)
在不共享时,您确定要在界面中使用共享指针吗?
如果您只想阅读ClassB
的值,您可以
const ClassB& getClassB() const {
return *aClassB;
}