У меня есть класс, который похож на это:
Однако после исходного конструктора конструктор копирования вызывается 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]));