代码之家  ›  专栏  ›  技术社区  ›  hookenz

为什么这样多次调用复制构造函数?

  •  2
  • hookenz  · 技术社区  · 14 年前

    我有一个类似的类:

    但是,在初始构造函数之后,复制构造函数被调用10次。 如果我不执行线程创建步骤。它被叫了4次,这是我所期望的。 这是为什么?我该如何避免?

    在这种情况下,我应该避免使用std::vector,而只是执行新的删除操作吗?

    #include <cstdio>
    #include <vector>
    
    class A
    {
        public:
            A() { printf("hello\n"); }
            ~A() { printf("Goodbye\n"); }
            A(const A&)
            {
                printf("copy constructing\n");
            }
    
            Thread() { }
    };
    
    
    int main()
    {
        std::vector<A> a(4, A);
    
        for (int i = 0; i < a.size(); i++){
            threads_.create_thread(boost::bind(&A::Thread, a[i]));
        }
    }
    

    好的,我发现了问题。

    这是:

            threads_.create_thread(boost::bind(&A::Thread, a[i]));
    

    应该是:

            threads_.create_thread(boost::bind(&A::Thread, &a[i]));
    
    2 回复  |  直到 14 年前
        1
  •  3
  •   Sergey Kurenkov    14 年前

    Boost.Ref

    for (int i = 0; i < a.size(); i++){
         threads_.create_thread(boost::bind(&A::Thread, boost::ref(a[i]) ));
    }
    

    Boost.Bind

        2
  •  1
  •   Community George Stocker    7 年前

    boost::bind Use ref

    new[] std::vector delete