2017-06-12 10 views
-1

私は基本クラスに共有ポインタを持っています。子クラス全体の共有ポインタ

#ifndef ROOM_HPP 
#define ROOM_HPP 
#include <iostream> 
#include <string> 
#include <memory> 

#include "Pocket.hpp" 


using namespace std; 

    class Room 
    { 
    protected: 
     Room *up; 
     Room *down; 
     Room *left; 
     Room *right; 
     string name; 

     shared_ptr<Pocket> p{ new Pocket() }; 

共有ポインタが...

#ifndef POCKET_HPP 
#define POCKET_HPP 

#include <iostream> 
#include <vector> 
#include <string> 

using std::endl; 
using std::vector; 
using std::cout; 
using std::cin; 
using std::string; 



class Pocket 
{ 
private: 
    vector<string> pocket; 

public: 
    //constructor 
    Pocket(); 
    void addPocket(string); 
    string getPocket(); 

}; 



#endif 

私は2つの子クラスでこの共有ポインタを持っています。しかし、ある子クラスのベクトルを変更すると、その変更は2番目の子クラスに反映されません。これは共有ポインタで動作するべきではありませんか?

私は基本的に、異なるクラス間で共有できるベクトルを作成しようとしており、これを達成するのは本当に苦労しています。

+1

を持つことができなくなりますので、これはあまり柔軟性があります予期しない動作。関連性のないものを取り出してください。 – aschepler

+0

子クラスインスタンス間で 'std :: shared_ptr'をどのように共有するべきですか? –

+0

すべての子クラスにわたって同じベクトルにアクセスしようとしています。 1つのクラスのベクトルに値を追加すると、他のすべての子クラスでその値を確認できます。 – MJ1986

答えて

2
shared_ptr<Pocket> p{ new Pocket() }; 

^部屋が作成されるたびに呼び出され、複数の未接続のPocketオブジェクトを作成します。それを "共有ポインタ"と呼んでもそれは変わりません。各部屋は依然として独自のPocketオブジェクトを作成しています。

「新しいポケット」への呼び出しは、一度発生する必要があります。同じPocketを共有するすべてのRoomは、共有ポインタをポイントするように設定できます。 [MCVE]実証を用意してください

あなたの選択肢は、「ポケットP」すべての部屋で共有静的変数にすることですが、部屋のサブセットは、自分のポケット

関連する問題