类Logger是可复制和可移动的,这有意义吗?

Does it make sense for a class Logger to be copyable and movable?

本文关键字:有意义 可移动 Logger 可复制      更新时间:2023-10-16

我最近在这里问了很多问题。我在考虑语义学。

没有使复制或移动它变得困难,事实上它只有一个成员函数log(),没有数据成员(可能将来)。但在我看来,这种类型的对象是可复制和可移动的,这在逻辑上似乎是不正确的。

如果您计划在整个过程中只有一个登录,那么使用静态对象,不需要复制和删除对象

如果您计划使用有限数量的对象(例如每个日志级别一个),并且这些对象很重(大缓冲区,odbc连接),那么值得使用可移动和可复制的类。

但是,你不能在可复制的类中使用互斥锁,因为互斥锁是不可复制的。

简短的回答:日志记录器有点像输出流,所以与流一样。可移动但不可复制

长答案:这分为两个决定,每个决定分为两个部分:

  • 我是否应该使记录器接口满足这种类型,保证可复制和可移动?

未来的日志类型可预见地将包含流或互斥锁,这意味着接口不应该保证可复制,因为这些东西是不可复制的。一个日志记录器的vector可能是有意义的,所以让日志记录器可移动并不是完全没有意义,只要你没有看到不这样做的具体理由。

  • 我应该让这个类可复制和可移动吗?

这可能无关紧要,除非你说你计划在将来添加数据成员。也就是说,您将修改这个日志记录器类,而不是编写新的日志记录器类,这些日志记录器类满足相同的基本接口,但使用不同的日志消息接收器。如果您确定这是明智的,那么出于这个原因,同样的考虑也适用于这个类和接口:不要使它可复制。

相关文章: