AN
Size: a a a
AN
AT
IZ
V
АК
struct bar { std::unique_ptr<int> value; };
boost::asio::awaitable<void> f(bar by_value) { co_return; }
// где-то далее
co_await f(bar{ std::make_unique<int>(5) }); // double free
Баг в коде или в компиляторе? Использую gcc-10.2, получаю double free в деструкторе unique_ptr. При этом:bar сделать локальной переменной, а только потом мувнуть в f - всё будет ок. std::string вместо std::unique_ptr.DF
DF
АК
struct bar { std::unique_ptr<int> value; };
boost::asio::awaitable<void> f(bar by_value) { co_return; }
// где-то далее
co_await f(bar{ std::make_unique<int>(5) }); // double free
Баг в коде или в компиляторе? Использую gcc-10.2, получаю double free в деструкторе unique_ptr. При этом:bar сделать локальной переменной, а только потом мувнуть в f - всё будет ок. std::string вместо std::unique_ptr.bar temp{ .value = std::make_unique<int>(5);
auto result = f(copy_not_move(temp));
// здесь вызывается деструктор temp, который был ранее побитово скопирован (!) в fАК
EP
struct bar { std::unique_ptr<int> value; };
boost::asio::awaitable<void> f(bar by_value) { co_return; }
// где-то далее
co_await f(bar{ std::make_unique<int>(5) }); // double free
Баг в коде или в компиляторе? Использую gcc-10.2, получаю double free в деструкторе unique_ptr. При этом:bar сделать локальной переменной, а только потом мувнуть в f - всё будет ок. std::string вместо std::unique_ptr.АК
d
struct bar { std::unique_ptr<int> value; };
boost::asio::awaitable<void> f(bar by_value) { co_return; }
// где-то далее
co_await f(bar{ std::make_unique<int>(5) }); // double free
Баг в коде или в компиляторе? Использую gcc-10.2, получаю double free в деструкторе unique_ptr. При этом:bar сделать локальной переменной, а только потом мувнуть в f - всё будет ок. std::string вместо std::unique_ptr.d
struct bar { std::unique_ptr<int> value; };
boost::asio::awaitable<void> f(bar by_value) { co_return; }
// где-то далее
co_await f(bar{ std::make_unique<int>(5) }); // double free
Баг в коде или в компиляторе? Использую gcc-10.2, получаю double free в деструкторе unique_ptr. При этом:bar сделать локальной переменной, а только потом мувнуть в f - всё будет ок. std::string вместо std::unique_ptr.АК
d
j
d