【发布时间】:2018-04-02 23:50:35
【问题描述】:
exp。我有一个
class foo{
public:
int const * const array;
size_t const length;
}
这些变量在构造后应该没有变化,包括任何成员方法,但值应该被每个人访问,所以它们应该是常量。
但是在构造函数中,我需要先确定长度,然后才能初始化数组,
此外,我需要调用一个函数来分配内存位置,而不仅仅是new,因为这个类是一个巨大的不透明数据结构的桥梁,而内存是由那个人管理的。(考虑一下. 像 v8)。
我该如何初始化?
附言让我们调用分配器void * bar(size_t),构造函数(可能)看起来像:
foo(size_t const len, int const *arr) {
this->array = reinterpret_cast<int *> (bar(len));
this->length = len;
for(size_t i = 0; i < len; i++) array[i] = arr[i];
}
【问题讨论】:
-
我假设您的构造函数采用
const int*参数和length或类似的东西?如果是这样,这是微不足道的。如果没有,这是无法解决的,因为我们只知道你想要什么输出,没有任何输入。 -
"在构造函数中,我需要先确定长度,然后才能初始化数组,"正确。就这样做吧。有什么问题?
-
在您的代码中看不到构造函数。
-
@RemyLebeau 我考虑过这种方式,在这种情况下我需要将每个成员方法标记为'const',并且我还需要为这些值编写getter并将它们标记为私有。
-
@YongjianWang 您显示的循环将不起作用,因为
array指向的const值无法分配给
标签: c++ constructor constants