Почему я могу назначить новый адрес для вектора, содержащего постоянные указатели? - PullRequest
1 голос
/ 19 августа 2010

Я думаю, что заголовок ясен при объяснении моей проблемы .... рассмотрите следующий фрагмент:

class Critter {
    int m_Age;
};

int main()
{
    vector<Critter* const> critters;
    for(int i = 0; i < 10; ++i)
        critters.push_back(new Critter());

    critters[2] = new Critter();

    return 0;
}

Разве строка critters[2] = new Critter(); не должна быть недопустимой?

Спасибо

Ответы [ 2 ]

5 голосов
/ 19 августа 2010

На самом деле эта строка должна быть недопустимой (даже с учетом #include <vector> и using std::vector;):

vector<Critter* const> critters;

Поскольку требуется, чтобы тип, используемый в контейнере, был назначаемым, а все, что const явно не было.

0 голосов
/ 19 августа 2010

Извините, я не опубликовал весь код, потому что не хватает только включений и использования ... в любом случае вот весь код:

#include <iostream>
#include <vector>

using namespace std;

class Critter {
    int m_Age;
};

int main()
{
    vector<Critter* const> critters;
    for(int i = 0; i < 10; ++i)
        critters.push_back(new Critter());

    critters[2] = new Critter();

    return 0;
}

И этот код, как он есть, прекрасно компилируется, даже без предупреждения в VS 2010 ... Еще раз спасибо ...

...