我在 MyClass 上有以下 c++ 函数:
class MyClass {
public:
std::vector<MyObject*> getVector();
};
我想确保抓取此集合的对象不会修改集合或内容。实现这一目标的适当 C++const
用法是什么?
编辑:“内容”是指指针及其指向的内容。
std::vector<const MyObject *> getVector();
或者
const std::vector<const MyObject *> &getVector();
应该做的伎俩。您不需要指针保持不变,只需要它们指向的 MyObject 实例和 std::vector 对象(如果返回引用),因此向量不会改变其状态并且任何引用的项目都不会暴露为非常量。
在旁注中,std::vector<MyObject*> getVector()
将返回该向量的副本,就 OOP 原则(封装)而言,这是一种可取的行为:
调用此 getter 将不允许改变 MyClass 实例的状态。
当然,性能方面的设计很糟糕,除非你真的需要返回一个副本(对于吸气剂来说相当奇怪的规范)。这就是为什么您应该返回对 const object 的引用,这同时允许返回对象本身(不复制),同时不允许其突变。
不确定它是否正确。我只是用
class MyClass {
std::vector<MyObject*> my_objects_;
public:
const std::vector<const MyObject*> &getVector() {
return *reinterpret_cast<const std::vector<const MyObject *> *>(&my_objects_);
}
};
做这个把戏。