【发布时间】:2017-07-30 16:11:28
【问题描述】:
我看过一个关于特质的 Alexandrescu 教程,我有一些想法要分享。这是代码:
// Example 6: Reference counting traits
//
template <class T>
class RefCountingTraits
{
static void Refer(T* p)
{
p->IncRef(); // assume RefCounted interface
}
static void Unrefer(T* p)
{
p->DecRef(); // assume RefCounted interface
}
};
template <>
class RefCountingTraits<Widget>
{
static void Refer(Widget* p)
{
p->AddReference(); // use Widget interface
}
static void Unrefer(Widget* p)
{
// use Widget interface
if (p->RemoveReference() == 0)
delete p;
}
};
在这种情况下,与标准虚函数成员情况相比,我们有多少开销?在这种情况下,我们也没有直接访问对象:我们仍在传递一个指针。编译器是否能够以同样的方式对其进行优化?
【问题讨论】:
标签: c++ performance templates virtual traits