4

我在 MyClass 上有以下 c++ 函数:

class MyClass {
public:
    std::vector<MyObject*> getVector();
};

我想确保抓取此集合的对象不会修改集合或内容。实现这一目标的适当 C++const用法是什么?

编辑:“内容”是指指针及其指向的内容。

4

3 回答 3

4
std::vector<const MyObject *> getVector();

或者

const std::vector<const MyObject *> &getVector();

应该做的伎俩。您不需要指针保持不变,只需要它们指向的 MyObject 实例和 std::vector 对象(如果返回引用),因此向量不会改变其状态并且任何引用的项目都不会暴露为非常量。

于 2013-10-07T17:19:58.407 回答
1

在旁注中,std::vector<MyObject*> getVector()将返回该向量的副本,就 OOP 原则(封装)而言,这是一种可取的行为:

调用此 getter 将不允许改变 MyClass 实例的状态。

当然,性能方面的设计很糟糕,除非你真的需要返回一个副本(对于吸气剂来说相当奇怪的规范)。这就是为什么您应该返回对 const object 的引用,这同时允许返回对象本身(不复制),同时不允许其突变。

于 2018-05-06T21:06:22.537 回答
1

不确定它是否正确。我只是用

class MyClass {
  std::vector<MyObject*> my_objects_;
 public:
  const std::vector<const MyObject*> &getVector() {
    return *reinterpret_cast<const std::vector<const MyObject *> *>(&my_objects_);
  }
};

做这个把戏。

于 2018-08-06T20:47:00.793 回答