我有很多必须用 C++ 编写的 C# 代码。我在 C++ 方面没有太多经验。
我正在使用Visual Studio 2012进行构建。该项目是 C++ 中的静态库(不在 C++/CLI 中)。
我知道这是一个基本问题,但我一直在阅读,我很困惑。在 C# 代码中,他们在几个地方使用了double[] 数组,从他们使用它们的方式来看,我看到在 C++ 中替换它们的最佳方法是使用向量。
C# 中有一些属性返回数组的副本,我想在 C++ 中做同样的事情。
注意:myArray 是 MyClass 的成员。
C#
public double[] MyArray
{
get
{
/*** Some Code Here ***/
double[] myCloneArray= (double[])myArray.Clone();
return myCloneArray;
}
}
我想在 C++ 中完成类似的事情,但尽量减少创建的副本数量。这是正确的吗?
C++
vector<double> MyClass::GetMyArray()
{
/*** Some Code Here ***/
vector<double> myCloneArray= vector<double>(myArray);
return myCloneArray;
}
我只想创建一个 myArray 的副本。由于我没有返回引用,因此我的理解是在返回 myCloneArray 时,将创建它的副本。这总是正确的吗?
我想确定一下,所以我在网上阅读,但我很困惑,因为有些人说有些编译器不这样做。
我想确保我总是发送一个副本,而不是同一个向量。我现在正在使用编译器,但最终我的代码也将在其他编译器中构建,所以我需要确保这不依赖于编译器
这是我能走的最好的方式吗?或者我可以减少代码,如下所示:
C++
vector<double> MyClass::GetMyArray()
{
/*** Some Code Here ***/
return myArray;
}
并且会调用vector(myArray)的复制构造函数?