Вызов конструкторов и деструктора при использовании std::function совместно с std::bind
Имеется код:
#include <functional>
#include <iostream>
struct Foo {
Foo(int num) : num_(num) {std::cout << "Hello World" << std::endl;}
~Foo() {std::cout << "Goodby World" << std::endl;}
void print_add(int i) const { std::cout << num_+i << '\n'; }
int num_;
};
int main()
{
using std::placeholders::_1;
std::function<void(int)> f_add_display59 = std::bind( &Foo::print_add, Foo(75), _1 );
}
При его исполнении в консоль пишется один раз Hello World и три раза Goodby World.
Почему один раз вызывается конструктор и, затем, деструктор понятно: так как вторым аргументом std::bind идет временный объект, но почему происходит вызов еще двух деструкторов? Где, тогда, два конструктора, если объекты били созданы?
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Запустите этот код и получите ответ :)
#include <functional>
#include <iostream>
struct Foo {
Foo(int num) : num_(num) {std::cout << "Hello World" << std::endl;}
Foo(const Foo& f) : num_(f.num_) {std::cout << "Hello World copy" << std::endl;}
~Foo() {std::cout << "Goodby World" << std::endl;}
void print_add(int i) const { std::cout << num_+i << '\n'; }
int num_;
};
int main()
{
using std::placeholders::_1;
std::function<void(int)> f_add_display59 = std::bind( &Foo::print_add, Foo(75), _1 );
}