C++ 共享Ptr变量访问和面向对象编程

C++ 共享Ptr变量访问和面向对象编程,c++,oop,C++,Oop,我需要一些建议,因为我是c的新手++ 对于我的风力涡轮机分析程序,我将其划分为处理特定任务的各种对象 一个对象处理文件输入/输出,在我这个麻烦的例子中,我从一个文件中读取数据,然后这些数据被填充到一个名为blade的对象数组中,每个对象都包含一系列与每个刀片相关的内容,如应力和坐标 另一个任务是后期处理,我希望这个post pro对象能够处理刀片数据 因此,我的main实例化了一个post-pro对象,它启动输入/输出对象并告诉它将数据读入刀片对象数组。到目前为止还不错,现在我想把填充的刀片对象

我需要一些建议,因为我是c的新手++

对于我的风力涡轮机分析程序,我将其划分为处理特定任务的各种对象

一个对象处理文件输入/输出,在我这个麻烦的例子中,我从一个文件中读取数据,然后这些数据被填充到一个名为blade的对象数组中,每个对象都包含一系列与每个刀片相关的内容,如应力和坐标

另一个任务是后期处理,我希望这个post pro对象能够处理刀片数据

因此,我的main实例化了一个post-pro对象,它启动输入/输出对象并告诉它将数据读入刀片对象数组。到目前为止还不错,现在我想把填充的刀片对象数组恢复到post pro中,这样我就可以用它做一些事情了

这引出了我的问题,但我将首先问问题0:

0:这种处理对象的方法听起来正确吗

而实际问题是:

1:返回对象数组的指针似乎是一种方法,出于某种原因,我认为共享的ptr是一种方法。但是我不知道查看变量数据的语法。下面是post pro类中的一些示例代码:

void PostProcessor::start() {
        VLMio io;//input/output object
        io.loadData(theFileName);//load file
        test = std::tr1::shared_ptr<Blade>(new Blade());//start up shared ptr called test
        test = io.testReturn();//attempt to receive blade obect array into that pointer, is this correct?
        cout<<test[0].x[0]<<endl//this line is trouble? is this how I would see the first x coord on the first blade? 
    //i.e is the syntax the same as for regular object pointers?
}
我还没有弄清楚如何返回这些刀片对象,但它可能看起来像这样:

std::tr1::shared_ptr<Blade> testReturn() {
//somehow attach a shared_ptr to the blades array pointer thing
//somehow return a shared ptr
}
std::tr1::shared\ptr testReturn(){
//以某种方式将共享的\u ptr附加到刀片阵列指针上
//以某种方式返回共享ptr
}

总之,正确的方法是什么,智能指针对象的成员变量的语法是什么,我希望您理解,对不起,我是一个新手。

如果您想使用直向数组(如C中所示),您需要创建一个刀片数组,而您的代码只创建一个刀片数组。您还需要检查此问题:

但是与其把这些都搞乱了,不如直接返回一个
std::vector
,或者如果它有一个固定的大小,还可以返回一个
std::tr1::array

    test = std::tr1::shared_ptr<Blade>(new Blade());//start up shared ptr called test

但是您不能使用
shared\u ptr
存储返回的值。正如其他人所建议的那样,
vector
可能是您想要的。

如何定义
io.testReturn()
呢?testReturn还没有完全解决,因为我不确定,但我已经添加了一个示例,说明上面的内容会发生什么这看起来像是std::vector的黄金时间:)是的,请参阅更新,我想现在我已经为指针创建了一个刀片数组。我无法返回向量,因为每个blade对象都包含数组和其他数据成员,例如其他对象,它们是可变的size@CptL是的,你可以。而C++类的对象总是有相同的大小。所以我是否将我的对象与向量匹配起来?@ CptL没有“某种程度上”的牵涉——你可以在C++中存储任何类型的C++::vector。ununsson,听起来很有前途,我会查看它的更新,我想现在我可以有多个刀片对象返回。我无法返回向量,因为每个blade对象都包含数组和其他数据成员,例如其他对象,它们是可变的size@CptL我认为你对C++对象如何在内存中的理解缺乏基本的知识——同一类的所有对象都有相同的布局和相同的大小。是的,我对C++的很多东西基本上缺乏了解,但我确实知道我只是有点混淆了。
    test = std::tr1::shared_ptr<Blade>(new Blade());//start up shared ptr called test
    new Blade[somesize]