Предположим, у меня есть следующий код:
#include <iostream>
#include <vector>
using namespace std;
class X {
public:
int x[1000];
X(int y) { for (int i = 0; i < 1000; i++) x[i] = y; }
};
int main() {
vector<X> v;
X x0(0);
X x1(1);
X x2(2);
v.push_back(x0);
v.push_back(x1);
v.push_back(x2);
cout << v[2].x[33] << endl;
return 0;
}
Если я правильно понимаю, в моем коде я выделяю память в стеке для x0
, x1
и x2
, а затем копирую это содержимое в память, выделенную для меня vector
. Кроме того, насколько я понимаю, семантика перемещения здесь не поможет, потому что это не совсем так, как X
содержит указатель на ресурс, расположенный где-то еще.
Могу ли я напрямую вызвать конструктор блока необработанной памяти, выделенного для меня vector
? Если нет, то как правильно поступить в подобных ситуациях?
x[1000]
является заполнителем для структур, которые вы не можете показать здесь, мой следующий вопрос: являются ли эти структуры похожими на дескрипторы? Если вы действительно используете такие большие массивы, используйте vector‹int›. Не боритесь с языком. - person indeterminately sequenced   schedule 22.05.2013