【发布时间】:2020-05-14 02:03:08
【问题描述】:
之前有人问过类似的问题,但我有一些更深入的问题。
假设我有结构
struct thread {
pagetable* pt;
vnode* fdtable[64];
};
我有一个该结构的现有实例,以及一个名为p 的全新实例。我希望p 的fdtable 元素指向与旧结构相同的fdtable 数组,这样一个结构中数组的更改将反映在另一个结构的数组中。但是,当我执行p->fdtable = this->fdtable; 时,我收到错误消息invalid array assignment。如果我尝试通过投射来获得创意,我会收到错误消息 incompatible types in assignment of 'vnode**' to 'vnode* [64]'
无论我尝试什么,编译器都会坚决阻止我尝试做的事情。在网上做了一些研究后,看来我想做的事情是不可能的。
我的问题有几个部分:
- 为什么我可以通过简单地分配指针
p->pt = this->pt;来轻松共享其他数据类型,但对于数组却不能?设计决策背后的原因是什么?既然数组的大小不能改变,为什么要区别对待呢? - 在结构之间实现共享数组的最简单方法是什么?现在我的计划是创建一种包含所有共享信息的新型结构,然后简单地使两个结构都指向这个共享的结构。不过,我想知道是否有更好的方法。
【问题讨论】:
-
1.因为 C++ 不是这样工作的。数组在 C++ 中并不真正存在。它们是每个人想象的虚构。他们只是绝地的头脑戏法。 2. 这就是指针的用途。使用对 C++ 中对象的正确用法和范围有完整、透彻理解的指针。
-
如果你希望两个结构都指向一个数组(可能相同),它们应该有一个指向数组的字段。
-
另外,这个问题是关于 c 还是 c++ 的?你已经用两者标记了它,但它们是不同的语言。
-
如果你真的用 c++ 编码,你可以使用 std::shared_ptr