हाय के बजाय प्रति का उपयोग करता है मैं जीसीसी 4.7 का उपयोग कर एक noexcept चाल निर्माता के साथ एक वर्ग फू बनाया है और 2 के लिए वेक्टर आरक्षित आकार सेट तो यह जब 3 आइटम जोड़ने आकार पुनः आवंटित करने के लिए होता है। ऐसा लगता है कि यह करने के दौरान यह चालक कन्स्ट्रक्टर की बजाय कॉपी कन्स्ट्रक्टर को बुला रहा है। क्या मुझसे कोई चूक हो रही है?वेक्टर पुनः आबंटन चाल निर्माता
#include <vector>
#include <iostream>
class Foo
{
public:
Foo(int x) : data_(x)
{
std::cout << " constructing " << std::endl;
}
~Foo()
{
std::cout << " destructing " << std::endl;
}
Foo& operator=(const Foo&) = default;
Foo& operator=(Foo&&) = default;
Foo(Foo&& other) noexcept : data_(std::move(other.data_))
{
std::cout << " Move constructing " << std::endl;
}
Foo(const Foo& other) noexcept : data_(other.data_)
{
std::cout << " Copy constructing " << std::endl;
}
private:
int data_;
};
int main (int argc, char *argv[])
{
std::vector<Foo> v;
v.reserve(2);
v.emplace_back(1);
std::cout << "Added 1" << std::endl;
v.emplace_back(2);
std::cout << "Added 2" << std::endl;
v.emplace_back(3);
std::cout << "Added 3" << std::endl;
std::cout << "v size: " << v.size() << std::endl;
}
उत्पादन:
constructing
Added 1
constructing
Added 2
constructing
Copy constructing
Copy constructing
destructing
destructing
Added 3
v size: 3
destructing
destructing
destructing
मेरे बजना निर्माण प्रतिलिपि ctor एक बार सक्रिय नहीं है। एक स्मार्ट जीसीसी प्राप्त करें? – WhozCraig
यह काम करता है के रूप में उम्मीद जीसीसी 4.8.1 के साथ (जो vector' चाल निर्माता कहता है ')। –
यह [4.8.1 जीसीसी] के साथ ठीक काम करता है (http://ideone.com/SXoMw2)। 4.7 – Angew