Я все еще не понимаю, как ведет себя std::vector::resize()
. Рассмотрим следующий код (см. также требования к типу для std::vector‹type›).
struct A {
A() : X(0) { std::cerr<<" A::A(); this="<<this<<'\n'; }
A(A const&) { assert(0); } // is required but doesn't fire in vector::resize
int X;
};
int main()
{
std::vector<A> a;
a.resize(4); // would not compile without A::A(A const&) or A::A(A&&)
}
Без A::A(A const&)
или A::A(A&&)
строка с a.resize(4);
не компилируется. Однако этот конструктор никогда не вызывается: assert(0)
не срабатывает! Кто-нибудь может мне это объяснить?
Моя интерпретация заключается в том, что присутствие любого из этих конструкторов требуется магией шаблона allocator_traits<>
(используется std::vector::resize()
), но на самом деле никогда не вызывается. Однако зачем вам требовать наличия метода, если вы его не вызываете?
-DNDEBUG
, если я правильно помню)? - person BoBTFish   schedule 04.09.2012--std=c++0x
. При этом я вижу, что нормальный ctor звонил 4 раза. Посмотрите здесь: en.cppreference.com/w/cpp/container/ вектор/изменить размер - person BoBTFish   schedule 04.09.2012