在使用Boost.Asio库时,如果你尝试创建一个std::vector
来存储计时器(例如boost::asio::steady_timer
),可能会遇到编译失败的问题。这通常是由于计时器对象的生命周期管理不当导致的。
std::vector
中可能会因为析构顺序不当而导致未定义行为。为了避免这些问题,可以使用智能指针(如std::shared_ptr
或std::unique_ptr
)来管理计时器对象的生命周期,并确保计时器对象不被拷贝。
#include <boost/asio.hpp>
#include <iostream>
#include <memory>
#include <vector>
int main() {
boost::asio::io_context io_context;
// 使用std::vector存储std::shared_ptr<boost::asio::steady_timer>
std::vector<std::shared_ptr<boost::asio::steady_timer>> timers;
// 创建计时器并添加到vector中
for (int i = 0; i < 5; ++i) {
auto timer = std::make_shared<boost::asio::steady_timer>(io_context, boost::asio::chrono::seconds(i + 1));
timers.push_back(timer);
// 设置计时器回调
timer->async_wait([timer](const boost::system::error_code& ec) {
if (!ec) {
std::cout << "Timer expired!" << std::endl;
}
});
}
// 运行io_context
io_context.run();
return 0;
}
这种技术可以用于需要管理多个定时任务的场景,例如:
通过使用智能指针管理计时器对象,可以确保计时器对象的生命周期正确管理,避免内存泄漏和未定义行为。
领取专属 10元无门槛券
手把手带您无忧上云