C ++数据成员。目标:在构造函数中初始化然后单独留下,const将在这里工作吗?

时间:2011-08-28 19:44:07

标签: c++ constructor const datamember

我有以下

    struct dweDMPair {
        const dweller   *occu;
        const double    sqDM;
        float   prob;
        dweDMPair(dweller *inOccu, double sqdm) : occu(inOccu), sqDM(sqdm) {}       };

我想返回一个指向这些对象的指针数组,但希望它们不会被客户端意外删除。或者,错误,也许不是,只是尝试这种设计迭代。

我的问题是,是否有(非常简洁和整洁)的方式指定(正如我用const前缀所示)成员只在构造函数中分配?

我知道私有/公共和界面/方法可以对此进行排序,但幽默我,const关键字可被利用多远?

_ 修改 _

Nawaz,我的目标只是在构造函数中初始化3个数据成员中的2个。然后我可以将此实例导出为const dweDMPair * ptrToVal,以便客户端不能再调用delete-因为这对指向const实例的指针不起作用吗?然后,客户将继续为第三个成员prob提供自己的价值。是的,我知道功能强制保护,但我希望它更快。

成员不能是静态的,而是实例成员。如果你想知道..

2 个答案:

答案 0 :(得分:2)

是的,const做你想要的。请注意,您在构造函数初始化程序列表中执行的操作不是赋值,而是初始化。您不能分配给const对象,但可以使用值初始化它们。 此外,无论将它们设为const,您可能需要考虑将这些成员封装在类中作为私有成员。打字并不多,但确实提高了可维护性。

编辑:

要定义const指针:

Type * const member;

const Type* member;

第二种语法是指向const类型的指针,而不是const指针。

答案 1 :(得分:1)

你澄清了你真正想要的是:

  

然后我可以将此实例导出为const dweDMPair * ptrToVal,以便客户端不能再调用delete-因为这对指向const实例的指针不起作用吗?

可以在指向const实例的指针上调用Delete,并且可以在包含const个成员的对象上调用它。使用const无法帮助您实现目标。

一些无怨言编译的示例代码:

struct dweller {
};

 struct dweDMPair {
        const dweller   *occu;
        const double    sqDM;
        float   prob;
        dweDMPair(dweller *inOccu, double sqdm) : occu(inOccu), sqDM(sqdm) {}       
 };

int main() {

    dweDMPair const* p = new dweDMPair(NULL, 3.14);

    delete p;
}

您可能希望进一步澄清您的最终目标(可能在另一个问题中,如果它会过多地改变这个目标)。