儿童班级的共享指针

时间:2017-06-12 00:26:54

标签: c++ class pointers

我在基类中有一个共享指针。

#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

我在两个子类中有这个共享指针。但是当我在一个子类中对向量进行更改时,更改不会反映在第二个子类中。不应该使用共享指针吗?

我基本上试图创建一个可以在不同类之间共享的向量,并且很难完成此任务。

1 个答案:

答案 0 :(得分:2)

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

^每次创建一个Room时都会调用它,创建多个未连接的Pocket对象。调用它&#34;共享指针&#34;并没有改变这一点,每个房间仍在制作一个独特的Pocket对象。

呼叫&#34;新口袋&#34;需要发生一次,即在任何一个房间外面。然后,任何共享相同Pocket的Rooms都可以将它们的共享指针设置为指向它。

你的另一种选择是制作&#34; Pocket p&#34;所有房间共享的静态变量,但由于房间的子集无法拥有自己的口袋,因此灵活性较低