我有以下类声明:

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/

10-09 06:37
查看更多