相关疑难解决方法(0)

push_back vs emplace_back

我有点困惑有关之间的差异push_backemplace_back.

void emplace_back(Type&& _Val);
void push_back(const Type& _Val);
void push_back(Type&& _Val);
Run Code Online (Sandbox Code Playgroud)

因为有一个push_back超载采用右值参考我不太明白目的是emplace_back什么?

c++ stl visual-studio-2010 move-semantics c++11

684
推荐指数
7
解决办法
29万
查看次数

将对象推送到向量时,为什么会破坏对象?

我想知道为什么我推回到向量中的元素会在这种情况下调用它的析构函数:

#include <iostream>
#include <vector>

class Foo
{
public:
    Foo(int a)
     : m_a(a)
    {
        std::cout << "Foo ctor() " << m_a << std::endl;
    }
    ~Foo()
    {
        std::cout << "Foo dtor() " << m_a << std::endl;
    }
private:
    int m_a;
};

class FooStorage
{
public:
    static void createFoo(int a)
    {
        m_foos.push_back(Foo(a));
    }

    static std::vector<Foo> m_foos;
};

std::vector<Foo> FooStorage::m_foos;

int main()
{
    std::cout << "Before: " << FooStorage::m_foos.size() << std::endl;
    FooStorage::createFoo(53);
    std::cout << "After: " << FooStorage::m_foos.size() << std::endl;

    return 0;
} …
Run Code Online (Sandbox Code Playgroud)

c++

1
推荐指数
1
解决办法
324
查看次数

标签 统计

c++ ×2

c++11 ×1

move-semantics ×1

stl ×1

visual-studio-2010 ×1