我有以下
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
提供自己的价值。是的,我知道功能强制保护,但我希望它更快。
成员不能是静态的,而是实例成员。如果你想知道..
答案 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;
}
您可能希望进一步澄清您的最终目标(可能在另一个问题中,如果它会过多地改变这个目标)。