【发布时间】:2016-10-22 20:35:31
【问题描述】:
我很好奇非多态类中继承的影响。具体来说,我正在编写两个智能指针类,都没有虚拟方法,并且都用于非常独特的目的。由于基本的运算符重载和一些标准函数是相同的,并且它们只需要一个成员变量,我想我可以使用基类来重用代码。这是我的意思的一个简单的模型:
基类:
template <class T>
class Pointer_Impl
{
public:
T & operator*() { return this->*m_pointer; }
// etc.
protected:
T *m_pointer;
//protected to prevent instantiation without using = delete
Pointer_Impl() {}
Pointer_Impl(T *) {}
//other constructors, assignment and move operators, destructor here
};
然后:
template <class T>
class PointerA : public Pointer_Impl<T>
{
public:
PointerA() { m_pointer = nullptr; }
PointerA(T * obj) { m_pointer = obj; }
// other constructors, assignment and move operators, destructor, and any other class-specific functions here
};
问题:从缺少任何虚方法的基类派生是否存在内存或性能开销?因为它是一个智能指针实现,所以我想要的是精益求精。
我的直觉说不,不用担心,但我想从更聪明的头脑中确定。
【问题讨论】:
-
因为它是一个智能指针实现,所以我正在寻找精简和平均。原始指针可能比智能指针更精简。他们当然更卑鄙......
-
@erip 当然,原始指针总是会更快,但我希望以尽可能低的开销尽可能快。否则,智能指针的意义何在?
-
有几个拼写错误,缺少分号,错误的变量名,而且,如果构造函数是私有的,
PointerA无法创建基础子对象实例。 -
@user2079303 这是一个“简单的模型”来说明问题。我会检查错别字。
-
@JonHarper 我正在考虑查看程序集:) 无论如何,您不能像那样初始化父级的成员。您必须改为调用父构造函数。
标签: c++ c++11 inheritance smart-pointers