0

我有以下

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

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

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

const我知道 private/public 和 interface/methods 可以对此进行排序,但请幽默,该关键字可以利用多远?

_编辑_

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

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

4

2 回答 2

2

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

编辑:

要定义 const 指针,您可以:

Type * const member;

不是

const Type* member;

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

于 2011-08-28T19:52:34.507 回答
1

你澄清你真正想要的是:

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

Delete 可以在指向const实例的指针上调用,也可以在包含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;
}

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

于 2011-08-28T20:03:30.073 回答