ファンクターやイニシャライザーをコピーするとどうなるかについて少し混乱しています。次のコードでは、オブジェクトを常にコピー/移動すると思いましたが、それがSegfaultsであるかどうかは関係ありません。私は何か間違ったことをしているようですが、私の間違った仮定が何であるかをまだ理解していません。不思議なことに、cppreference.comで、コピーまたは移動コンストラクターが見つからなかったinitializer_list
ので、これらの場合に実際に何が起こるのだろうかと思います。
#include <string>
#include <vector>
#include <functional>
#include <iostream>
std::initializer_list<std::function<std::string()>> getInitializer() {
return {
[]() -> std::string {
return "If";
}
};
}
int main() {
std::function<int(std::string)> func;
{
auto init = getInitializer();
func = [init](std::string text) -> int {
std::vector<std::function<std::string()>> vec(init);
for( auto& el : vec ) {
std::cout << el();
}
std::cout << text << std::endl;
return 5;
};
}
return func(" you see this - the world is all right!");
}