プログラム全体で異なるオブジェクトに共有される共有ポインタを使用しようとしています。私は、必要なオブジェクトにポインタを渡す前にポインタを作成すると、データがないことに気付きました。これはおそらく、私がどのようにポインタを実装しているかと関係しています。私はデータ(一back)を追加した後に共有ポインタ(pointer_to_vector)を作成した場合、私はそれが動作私がやろうとしています何のサンプルを追加した、と他のオブジェクトの共有ポインタを正しく作成する
int main() {
// This would be the data I want to share. For simplicity
// using a vector of ints
std::vector<int> data;
// Create the shared pointer
// The objects that are getting access are not allowed to change the
// the data so thats why I put in const (could be wrong on what that is
// actually doing)
std::shared_ptr<const std::vector<int>> pointer_to_vector =
std::make_shared<std::vector<int>>(data);
// Add data to the object wanting to share
data.push_back(1);
data.push_back(2);
data.push_back(3);
data.push_back(4);
// If I look at pointer_to_vector in debu at this point it shows no
// data, size 0
}
を何が起こっているのか。しかし、プログラムの後半でベクターにデータを追加したい場合、ポインタは更新されないので、オブジェクトは新しいデータにアクセスできません。 私が間違っていることがありますか、基本的に私の理解は間違っていますか?
"make_shared"は、 "共有オブジェクトを作成する"ことを意味し、 "オブジェクトを共有する"ことを意味しません。 "私をピザにする"と "私に億万長者にする"の違いと同じです。 – molbdnilo
どのようにオブジェクトを共有させるのですか?私は "*"でポインタの従来の方法を使用する必要がありますか、それはshared_ptrで行うことができますか? – user6768079
オブジェクトが動的に割り当てられている場合は、そのオブジェクトへのポインタを 'shared_ptr'に渡して、' shared_ptr'がそのオブジェクトの所有権を引き受けるようにすることができます。自動オブジェクトまたは静的オブジェクトの場合、そのオブジェクトの所有権を譲渡することはできません。 – molbdnilo