【发布时间】:2013-10-29 15:11:29
【问题描述】:
我的问题是关于包装 std 库中的一些容器或对象,以及这样做的成本。
假设我需要创建一个 ThreadSafeStack 类。我将包装std::stack 容器并使用互斥锁使其线程安全。这完全没问题,因为新的ThreadSafeStack 的功能值得付出代价(函数调用)。但是,如果我想将std::mutex 包装到一个类MyMutex 中以在调试时添加日志功能怎么办?在您看来,值得还是不值得?
如果我这样做只是为了方便,以避免在我的所有文件中写入std:: 或using::std 怎么办?你觉得这很愚蠢吗?
我读过一些关于函数调用的文章(例如this),我想说这不会是一个很大的开销。
【问题讨论】:
-
您的包装函数调用很可能会在适当的优化级别内联,从而导致 ZERO 开销。例如检查this case:指针解引用包装到
operator*导致与原始指针解引用相同的汇编代码。许多级别的 C++ 抽象可以在优化过程中消失。 -
我还要补充一点,如果您正在执行 IO(例如写入日志文件),那么函数调用是您最不关心的问题。
-
你是对的@selalerer。
-
感谢@Evgeny Panasyuk 的示例。我们可以将您的快速回答视为答案吗?
-
这是decorator pattern,如果正确完成,我发现它非常有用。阅读它。
标签: c++