我有自己的类"SomeObject",其中包含一些成员。
现在,我有另一个类"WorkingClass",该类将此对象作为私有成员。
我的问题是:我想为"SomeObject"创建Getter,但我不希望任何人修改它。
哪种方法更好,1还是2?
1. 返回对象的const指针或引用,这样调用者只能读取对象,不能修改它。
2. 返回一个副本,调用者可以随意修改副本,但原始对象保持不变。
class WorkingClass
{
private:
SomeObject sObj;
public:
//... 1)
const SomeObject &const GetSomeObject()
{
return mousePosition;
}
//... 2)
const SomeObject *const GetSomeObject()
{
return &mouseMovement;
}
}
我知道你总是可以放弃const,但我只是试图让我的代码更加清晰和安全。
编辑:
那么我有一个进一步的问题。当我有一个智能指针成员并在类内部频繁使用它,然后突然想要让其他人读取一些值但不做其他操作时,这是否是一个好的解决方案,还是又过于冗长?
class X
{
private:
boost::shared_ptr<SomeObject> sob
public:
const const & GetSomeObject()
{
return *sob.get();
}
}
还有一个问题,如果返回 "const boost::shared_ptr<...> GetX()" 呢?这可能不是真正必要的,但仍然不是无用的,因为在这种情况下编译器会禁止使用 GetX().reset(..),如果没有 const boost::... 声明,则允许执行此无用操作。我的理解是否正确?