加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

对象数组,Java和C之间的区别

发布时间:2020-12-15 02:53:13 所属栏目:Java 来源:网络整理
导读:我是C的新手,我正在将一个 Java项目移植到C. 考虑以下Java代码,其中Piece是表示棋子的类: Piece[][] myPieces = new Piece[8][8]; 它创建一个数组,其中所有条目都为null. 我怎样才能在C中实现同样的目标?我试过了: Piece* myPieces = new Piece[8][8]; 但
我是C的新手,我正在将一个 Java项目移植到C.

考虑以下Java代码,其中Piece是表示棋子的类:

Piece[][] myPieces = new Piece[8][8];

它创建一个数组,其中所有条目都为null.

我怎样才能在C中实现同样的目标?我试过了:

Piece* myPieces = new Piece[8][8];

但是这将创建一个数组,其中所有条目都使用默认构造函数初始化.

谢谢

编辑:我希望C代码高效/优雅,我不关心也不想将粘贴从Java复制到C.如果需要,我很乐意大量修改代码结构.

编辑2:代码用于国际象棋程序,数组的大小永远不会改变,性能至关重要.

解决方法

答案取决于,因为与Java相反,在C中,您拥有不同的所有权语义和对象生命周期管理(两者齐头并进).

如果你想模拟类似于java的对象,你会写:

using PiecePtr = std::shared_ptr<Piece>;
std::array<std::array<PiecePtr,8>,8> Pieces;

shared_ptr具有与java对象类似的语义(在任何地方传递它,并且只要有对它的引用就保证它的生命周期).

如果你想对观察到的对象进行建模(即数组不拥有它们),你应该写:

using PiecePtr = Piece*;
std::array<std::array<PiecePtr,8> Pieces;

这确保了当Pieces对象被销毁时,实际的片段本身仍保留在内存中.

如果要为Pieces数组拥有的唯一对象建模,则应使用:

using PiecePtr = std::unique_ptr<Piece>;
std::array<std::array<PiecePtr,实际的部件本身也会被销毁.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读