基本的に、2 つのクラスでいくつかのデータを共有する必要があり、これを shared_ptr オブジェクトのベクトルとして保持したいと考えています。
コードを次の簡単なコンパイル可能な例に切り詰めました。
オブジェクト A に、オブジェクト B で初期化されたデータを表示させたいのですが、A のメソッド内で push_back() を実行しようとすると、B の shared_ptr オブジェクトのベクトルのサイズは変更されませんでした。コメント「これは関心のある点です」の行。)
この機能を得るためにどのようなアプローチを使用する必要がありますか、それとも間違った方向に進んでいますか? (C++ 初心者はこちら)
#include <memory>
#include <vector>
#include <iostream>
using std::cout;
using std::endl;
class DataClass {
public:
int i_;
};
class B {
public:
// constructor:
B() : my_data_(std::vector<std::shared_ptr<DataClass> >()) {
my_data_.push_back(std::shared_ptr<DataClass> (new DataClass));
my_data_.push_back(std::shared_ptr<DataClass> (new DataClass));
my_data_[0]->i_ = 1;
my_data_[1]->i_ = 2;
cout<<my_data_.size()<<endl;
};
// return the data
std::vector< std::shared_ptr<DataClass> > get_my_data() {
return my_data_;
};
// check the data:
void CheckData() {
cout<<my_data_.size()<<endl; // This is the point of interest
};
// member variable
std::vector< std::shared_ptr<DataClass> > my_data_;
};
class A {
public:
void start() {
// begin interaction with B class:
B b;
// get the vector of data pointers:
a_has_data_ = b.get_my_data();
// modify some of the data:
a_has_data_.push_back(std::shared_ptr<DataClass> (new DataClass));
a_has_data_[2]->i_ = 42;
b.CheckData();
};
private:
std::vector< std::shared_ptr<DataClass> > a_has_data_;
};
int main() {
A a;
a.start();
}