基本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#开发者很痛苦):


不熟悉艾根。但是我可以给大家一些关于C++编程的一般建议。
  • 在结构中存储矩阵x3d特征值
如果需要分配Matrix3d对象,我建议在结构或类的构造函数和析构函数中进行资源管理

还尝试使用智能指针代替C类型指针

参考号:

  • 作为参数传递给方法
通常更喜欢通过引用传递(如果可以,也可以使用常量引用)

  • 返回包含特征对象引用的结构
返回值实际上取决于。如果只修改输入引用,则可能不需要返回值;如果MyStruct对象很小,则可以按值返回


在评论中,你需要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;
}