使用带有智能指针的 getter
Using a getter with a smart pointer
假设我有以下 class:
#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 成员变量。
关于如何使用其他 classes 中的 get 函数获取 aClassB
的任何建议,但不允许从其他 classes 对 aClassB
进行更改。
我会尝试 return `const ClassB&:
const ClassB& getClassB() const {
return *aClassB;
}
不共享时,你确定要在界面中共享指针吗?
如果您只想允许读取 ClassB
的值,您可以执行
const ClassB& getClassB() const {
return *aClassB;
}
你可以return一个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
中不是常量。
假设我有以下 class:
#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 成员变量。
关于如何使用其他 classes 中的 get 函数获取 aClassB
的任何建议,但不允许从其他 classes 对 aClassB
进行更改。
我会尝试 return `const ClassB&:
const ClassB& getClassB() const {
return *aClassB;
}
不共享时,你确定要在界面中共享指针吗?
如果您只想允许读取 ClassB
的值,您可以执行
const ClassB& getClassB() const {
return *aClassB;
}
你可以return一个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
中不是常量。