使用带有智能指针的getter
Using a getter with a smart pointer
假设我有以下类:
#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
的任何建议。
在不共享时,您确定要在接口中使用共享指针吗?
如果你只想允许读取ClassB
的值,你可以做
const ClassB& getClassB() const {
return *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 ClassB&:
const ClassB& getClassB() const {
return *aClassB;
}
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 指向成员函数的模板指针 - getter
- C++:getter 如何返回指向动态分配数组的指针,而不直接访问它
- 为什么将指针转换为引用在我的访问器 (getter) 中不起作用?
- 返回指向常量getter的指针时,返回值类型与函数类型不匹配
- 使用指针访问类内部的getter函数
- 如果模板参数是指针,则在 getter 上删除了常量限定符
- 如何为指针类变量执行 setter 和 getter 函数
- C++ - 通过 getter 函数在单独的类中从对象指针映射访问成员函数
- 绑定C++成员变量:getter/setter 或原始指针
- C++重载getter两次,一次返回指针,另一次返回常量引用,都失败了
- 使用带有智能指针的getter
- 使指针Getter使用unique_ptr
- 指向对象的指针的私有矢量.如何使用getter方法访问这些对象
- 如何让getter返回另一个对象的指针
- std::map 中的对象指针在通过 getter 检索时损坏