Все още съм объркан относно поведението на 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