【发布时间】:2010-12-25 22:59:51
【问题描述】:
我有自己的类“SomeObject”,有几个成员。
现在,我有另一个类“WorkingClass”包含这个对象作为私有成员。
我的问题是:我想为“SomeObject”创建一个 Getter,但我不希望任何人修改它。
哪种方式更好,1 还是 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::... 声明,这个无用的操作将被允许。还是我错了?
【问题讨论】:
-
好吧,因为 someobject 是一个相当大的类。我只是想把它传回去,让其他人可以访问一些值
-
按值返回对象通常是安全的,因为每个现代编译器都实现了 RVO 和 NRVO。担心这是过早的优化。 :)