传递和分配时保护一些内存

Safe some memory when passing and assigning

我是 C++ 的新手(来自 C#),我想从一开始就掌握这些内存内容。
在下面的片段中,WorldChunkCoordinates 类型的变量按值传递给 WorldChunk 的内联构造函数,然后将传递的坐标分配给 WorldChunk::Coordinates,我认为这也是一个复制操作.
(复制赋值操作?)

如果我的假设是正确的,那么这有点愚蠢,因为我复制了两次实例。我认为如果我按值传递并按 reference 指针分配,性能会好得多。但是 WorldChunk::Coordinates 不是指针,也不是引用。

WorldChunk(WorldChunkCoordinates Coordinates) {
   WorldChunk::Coordinates = Coordinates;
}

有没有办法避免我的程序复制实例两次?
如果是,怎么做?

另外:默认情况下 = 赋值总是复制操作吗?
并且:我怎么知道一个特定的class可能有另一个通过引用复制的复制赋值操作?

首先是一个简单的解决方案:

将您的方法更改为:

WorldChunk(const WorldChunkCoordinates& Coordinates) {  WorldChunk::Coordinates = Coordinates;}

这将导致单个赋值指令,因为坐标是一个参考。

默认构造的赋值运算符按成员赋值。 赋值运算符的参数(通常)是对象的 const 引用,这样您就不会复制参数。

顺便提个小教程:http://www.cplusplus.com/doc/tutorial/我认为非常好。

C++ 中用户类型函数参数的约定是通过常量引用 (const MyType&) 传递输入参数,并通过引用传递输入输出参数 (MyType&)。

这是一个已知且已解决的问题,称为 initializer list(不要与容器混淆)。看起来像

 WorldChunk(WorldChunkCoordinates Coordinates) : Coordinates(Coordinates){} 

考虑对变量名使用小写字母。

您也可以使用

 WorldChunk(const WorldChunkCoordinates &Coordinates) : Coordinates(Coordinates){} 

但解引用比复制更快并不明显,尤其是在考虑编译器优化的情况下。