基本C++;-包含对象引用和作为方法参数传递的结构 我习惯于C语言和Matlab,我尝试用.做一个简单的C++程序。
很抱歉,我正在为基础知识而挣扎:基本C++;-包含对象引用和作为方法参数传递的结构 我习惯于C语言和Matlab,我尝试用.做一个简单的C++程序。,c++,object,struct,properties,eigen3,C++,Object,Struct,Properties,Eigen3,很抱歉,我正在为基础知识而挣扎: 在结构中存储矩阵x3d特征值 作为参数传递给方法 返回包含特征对象引用的结构 示例代码(这里不是编译,C#开发者很痛苦): 不熟悉艾根。但是我可以给大家一些关于C++编程的一般建议。 在结构中存储矩阵x3d特征值 如果需要分配Matrix3d对象,我建议在结构或类的构造函数和析构函数中进行资源管理 还尝试使用智能指针代替C类型指针 参考号: 作为参数传递给方法 通常更喜欢通过引用传递(如果可以,也可以使用常量引用) 返回包含特征对象引用的结构 返
- 在结构中存储矩阵x3d特征值
- 作为参数传递给方法
- 返回包含特征对象引用的结构
不熟悉艾根。但是我可以给大家一些关于C++编程的一般建议。
- 在结构中存储矩阵x3d特征值
- 作为参数传递给方法
- 返回包含特征对象引用的结构
在评论中,你需要C++中的资源管理的基本思想和实现方式。你可能想找一些书来学习这些主题。
我看不出有任何理由在这里使用指针。除非有令人信服的理由不使用值,否则请始终使用值。@Galik您的意思是在结构内部?我试图在调用该方法时防止复制巨大的矩阵对象,但如果我传递对该结构的引用就足够了。那么“B.K1(0,0)=1;”呢?如果需要,通过(const)引用或指针传递整个结构(或单个矩阵),以避免复制它。我对Eigen
库不太熟悉,无法给出更全面的答案。也就是说,您永远不想创建新的对象,而不是删除它(如果您想要一个指针,当它超出范围时会自动删除,这就是unique\u ptr
的作用,但是在这里,您可以声明该对象。)没有特别的理由需要一个结构;您可以传递两个参数。如果您确实需要一个仅仅是一对矩阵的对象,则有std::pair
。最后,在DoSomething()中返回&result;
是一个错误
,因为result
是一个临时对象,返回时将不存在!要修复return&result;
错误,最简单的方法是return result;
(使用更先进的技术,您可以通过移动而不是复制来有效地处理接收代码)。或者,您可以使用所谓的编程构造函数就地构造结果;`不过,我建议您首先学习如何将MyStruct result&
作为一个参数传递,告诉您的函数在何处存储其结果。然后,它就地进行计算,并且不会生成低效的副本。
struct MyStruct
{
Matrix3d* K1; //Is that the right way, using pointers?
Matrix3d* K2;
};
int main()
{
//Case 1
MyStruct* A = new MyStruct();
A->K1 = &(Matrix3d)Matrix3d::Random();
MyStruct* result = MyMethod(A);
//Case 2 - I noticed that everybody uses case 1, what is the difference?
MyStruct B;
B.K1 = &(Matrix3d)Matrix3d::Random();
B.K1(0,0) = 1; // Not working. How can I access it?
MyStruct* result = MyMethod(&B);
}
*MyStruct DoSomething(MyStruct& input)
{
MyStruct result;
result.K1 = ...
return &result;
}