c++ - 通过 const 引用传递动态数组结构

标签 c++ struct dynamic-arrays pass-by-const-reference

如果我在 C++ 中有一个包含动态分配数组的结构,例如:

typedef struct foo {
  int* p;
} foo;

foo aFoo;
aFoo.p = new int[n];
for(int i = 0; i < n; ++i)
  aFoo.p[i] = 0;

我怎样才能通过函数的引用来传递它,从而使存储在 aFoo.p[] 中的值不能被函数修改?

如果我声明 int func(foo const& aFoo) { ... } ,如果我尝试修改指针 aFoo.p,我会得到一个编译器错误,但是如果我尝试修改,例如 aFoo.p[0],则不会。我还可以分配一个新指针 int* p2 = aFoo.p 并通过它修改 aFoo.p[] 的值。

如果我只是传递指针,我相信这将是传递 int* const& pconst int* const& p 之间的区别,但我不是确保在这种情况下如何做到这一点,而无需在结构定义中将成员 p 声明为 const int*(这会导致代码的其他部分变得复杂)。

最佳答案

正如您所注意到的:无法修改指针,但可以修改内容。

如果你想保留指针,我建议使用 getter/setter:

struct foo {
    void setP(int* p) { this->p = p; }
    int* getP() { return p; }
    const int* getP() const { return p; }
private:
    int* p;
};

关于c++ - 通过 const 引用传递动态数组结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27845608/

相关文章:

带有 NDK 的 Android 未定义引用

c - 为什么结构成员似乎有一个溢出值?

c - 在 C 中调整数组大小

c++ - 从 init.d 脚本启动时程序无法打开文件

c++ - gcc 编译器错误消息路径取消父级

c - PDCurses mvprintw 结构错误

Swift可选赋值,处理nil/空字符串

c++ - 派生类可以在类声明中定义基类数组的大小吗?

c++ - 为什么 delete[] 会导致堆损坏错误?

c# - 如何在 Windows 中透明地以管理员身份执行任务