从返回指针的方法获取指针的地址

时间:2015-10-03 18:27:30

标签: c++ pointers reference

假设我有:

class Map {
public:
    Map();
    vector<Territory>* getTerritories();

};

vector<Territory>* Map::getTerritories()
{
    vector<Territory> t;
    for (int i = 0; i < 8; i++) {
        Territory ter;
        ter.setName("Territory " + std::to_string(i + 1));
        t.push_back(ter);
    }
    return &t;
}

现在在另一个课程中,我想获得我在getTerritories()方法中创建的相同矢量。

Here's how: 
    void GameSetup::assignTerritories()
    {
        vector<Territory>  * generatedTeritories = (*map).getTerritories(); // dereferenced
    }

我没有收到编译器错误,因为它们都是指针。但不知怎的,我似乎无法通过简单的迭代访问我的矢量中的我的Territory对象,就像你通常在矢量上做的那样。

此时,(*map).getTerritories()获取指向我的区域向量的指针(如果我尝试跟随)。现在假设我要制作一个“alias”某种指针,我要回来了,我该怎么做?是否有可能获得指针的地址?我问自己这个问题并尝试了以下内容:

vector<Territory>  * generatedTeritories = &(map->getTerritories());

但这显然不起作用。我不知道还能做什么,而且我一直在圈子里。

1 个答案:

答案 0 :(得分:1)

请忘记这里的指针。 getTerritories()正在返回指向本地对象的指针。函数返回后,此对象将被销毁。您只需要返回该对象,然后在generatedTeritories变量中找回。

class Map {
public:
    Map();
    vector<Territory> getTerritories();

};

vector<Territory> Map::getTerritories()
{
    vector<Territory> t;
    for (int i = 0; i < 8; i++) {
        Territory ter;
        ter.setName("Territory " + std::to_string(i + 1));
        t.push_back(ter);
    }
    return t;
}

void GameSetup::assignTerritories()
{
    vector<Territory> generatedTeritories = (*map).getTerritories(); // dereferenced
}

现在你可以得到这样的矢量地址:

vector<Territory>* addressOfGeneratedTeritories = &generatedTeritories;

但在generatedTeritories保持活着状态时使用它是唯一安全的(在上面的代码中,它是活着的,直到assignTerritories()执行结束,因为它是一个本地变量功能)。为了使它持久化,它必须是另一个对象的属性...它将保持活着,直到父对象被销毁......等等。它也可能是一个绝对不推荐的全局变量(它是一种不好的做法,面向对象的设计总是有替代品)。

顺便说一下,我建议你在开始编写游戏代码之前先关注一些关于C ++的教程......; - )