我有以下类声明:
class A {
public:
A();
private:
boost::asio::io_service io;
boost::asio::deadline_timer t;
};
下面的类
A
构造函数可以正常工作:A::A() : t(io) {
// do stuff
}
但是当我写这个:
A::A() {
t(io);
// do stuff
}
我收到以下错误:
可能是因为未定义
boost::asio::deadline_timer
的副本构造函数。但是在成员初始化列表的情况下会发生什么?它不使用复制构造函数吗?关于成员初始化列表中使用的机制是什么,与在类构造函数中使用赋值/复制构造函数时相比,我的问题可能更笼统。
最佳答案
这个问题与复制构造函数无关,您根本没有调用它。关键是两个t(io)
是不同的东西。
成员初始化列表中的t(io)
表示由构造函数以t
作为参数来构造io
。 (我想boost::asio::deadline_timer
有一个以boost::asio::io_service
作为参数的构造函数。)
构造函数主体中的t(io)
是一条语句,表示将t
用作函子,并将io
用作其参数。它失败,因为boost::asio::deadline_timer
不支持这种仿函数行为。
关于c++ - 成员初始化列表与分配/复制构造函数的关系(以Boost截止时间为单位),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39288624/