Új hozzászólás Aktív témák

  • EQMontoya

    veterán

    Beszéljünk az emplace_back vs. push_back témakörről.
    Tegnap felvetette az egyik arc, hogy használjunk mindenhol emplace-t, elvégre úgyis rendelkeznie kell az osztálynak copy-construktorral, tehát mindenhol olyan gyors lesz, vagy gyorsabb, mint a push_back.

    Nekem ez így annyira nem tetszett, mert az emplace helyben konstruálásra való, az igazából egy elég fura mellékhatás, hogy copy-ctr miatt igazából használható push_back helyett is.

    Jött a kérés, hogy akkor írjak olyan esetet, amikor nem ajánlott az emplace. Írtam:

    #include <iostream>
    #include <vector>
    #include <memory>

    class A
    {
    public:
    bool mb;
    explicit A(bool b): mb(b) {}
    };

    int main()
    {
    A* ap = new A(false);
    std::vector<A> vec;
    vec.emplace_back(ap); //this compiles without warning - sooooo bad!
    //vec.push_back(ap);
    std::vector<std::unique_ptr<A>> uptr_vec;
    uptr_vec.emplace_back(ap);
    delete ap; //busted
    }

Új hozzászólás Aktív témák