对象数组,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,实际的部件本身也会被销毁. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |