例如,我有一个类SomeClass
和两个方法SomeClass* getSomeClass()
和SomeClass* assignSomeClass()
。
我想要的是getSomeClass()
给予我完全访问类的内容(变量和函数是public
),但它返回的指针不应该被允许复制或赋值,例如SomeClass* ptr = getSomeClass()
应该是不可能的,但getSomeClass()->func()
应该工作得很好。
同样的,我希望assignSomeClass()
允许指针被赋值,但是尽可能的隐藏对象的内容,或者防止它们被改变(也许比SomeClass* assignSomeClass() const
更好的方法?),例如SomeClass* ptr = assignSomeClass()
应该工作,但是assignSomeClass()->func()
不应该。理想的情况下func()
应该是完全不可见的。
我该怎么做呢?
尤其是第一种情况是我最感兴趣的。
1条答案
按热度按时间lg40wkob1#
你不能这么做,这也不是你的工作。
因为C++17保证了省略,即使你的函数返回一个带有
operator->
重载的不可移动的 Package 器对象,调用者仍然能够创建一个该类型的命名变量,对此你完全无能为力。假设所讨论的指针在某种程度上被返回该指针的对象所拥有,并且您希望防止调用者将该对象长期存储在任何地方。这在语言中是无法保证的。您 * 必须 * 依赖于用户不会不正确地使用它。
另外,由于函数不能返回
nullptr
,因此应该返回一个引用。