c ++ 2d unique_ptr对象数组?

时间:2013-04-22 01:53:16

标签: c++ arrays pointers

我正在尝试创建一个简单的2D数组或SFML Sprite对象的向量。我尝试了很多不同的方法,总是得到错误或只是一个空的载体。

我试过了

// first x
for ( int c = 0; c < w ; ++c)
{
    vector<unique_ptr<sf::Sprite>> col;
    map.push_back(std::move(col));

    // then y
    for ( int r = 0; r < h ; ++r) {
        map[c].push_back(unique_ptr<sf::Sprite>(new sf::Sprite()));
    }
}

unique_ptr<sf::Sprite[0][0]> map;
...
map.reset(unique_ptr<sf::Sprite[0][0]>(new sf::Sprite[w][h]));

总的来说,我只是没有成功制作一个2d智能指针对象阵列,并想知道是否有人可以提供帮助。对不起,如果我没有包含足够的细节,这是我的第一个堆叠溢出的帖子,所以请温柔:)

编辑:对不起,让我详细说明一下。所以我在工厂类型类中制作这个二维数组,基本上是一个单例。所以我需要这个2d数组在创建它之后继续存在并离开堆栈等。

1 个答案:

答案 0 :(得分:0)

您将map声明为指向多维数组的指针,并尝试将std::vector<>类型的插入对象插入其中。相反,您可以使用向量(在这种情况下为向量)并消除数组的分配并在此过程中简化它。

#include <memory>
#include <vector>

namespace sf { class Sprite {}; }

int main()
{
    const int w = 5;
    const int h = 5;

    // vector of vectors of Sprites is what you're looking for
    std::vector<std::vector<std::unique_ptr<sf::Sprite>>>   map;

    // first x
    for ( int c = 0; c < w ; ++c)
    {
        // No need to access via index of c. Just append to the column vector itself.
        std::vector<std::unique_ptr<sf::Sprite>> col;

        // then y
        for ( int r = 0; r < h ; ++r)
        {
             col.push_back(std::unique_ptr<sf::Sprite>(new sf::Sprite()));
        }

        // Now add the column vector.
        map.push_back(std::move(col));
    }

    return 0;
}