函数的C ++语法,返回指针的不可变向量

时间:2013-10-07 17:15:12

标签: c++ vector stl const

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

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

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

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

3 个答案:

答案 0 :(得分:3)

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

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

应该做的伎俩。 你不需要指针是常量,只需要它们指向的MyObject实例和std :: vector对象(如果返回引用),所以向量不会改变它的状态,任何引用的项都不会暴露为非常数。

答案 1 :(得分:1)

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

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

当然,性能很差,设计很差,你实际上需要返回一个副本(相当奇怪的getter规范)。这就是为什么你应该返回一个引用const对象的原因,同时它允许返回对象本身(没有复制),同时禁止它的变异。

答案 2 :(得分:0)

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

lstPendientes = await (from item in db.erProcesaReenvio
                       group item by new
                       {
                           item.iderRegistroCredito,
                           item.cuentaClabe,
                           item.nombreCliente,
                           item.idCtaProcesar,
                           item.No_Cuenta,
                           item.afiliado,
                           item.ImporteCobrar
                       } into g
                       select new {
                           prop1 = g.iderRegistroCredito,
                           prop2 = g.cuentaClabe
                       });

完成任务。