【发布时间】:2016-01-28 16:53:27
【问题描述】:
假设我有一个如下所示的基类:
class Base
{
public:
Base(){ baseMember = new int( 10 ); }
Base &operator=( const Base &right )
{
baseMember = new int( *(right.baseMember) );
return *this;
}
protected:
int *baseMember;
};
现在我想拥有一个继承自 Base 的 Derived 类,并拥有一个名为derivedMember 的新指针成员:
class Derived : public Base
{
public:
Derived():Base(){ derivedMember = new double( 10.1 ); }
Derived &operator=( const Derived &right )
{ /*some implementation */ }
private:
double *derivedMember;
};
我应该如何以一种可以调用基类 operator= 的方式在派生类上实现 operator= 并避免在派生类上重写基类 operator= 实现?简而言之,我怎样才能避免这样做:
Derived &operator=(const Derived &right )
{
baseMember = new int( *(right.baseMember) ); //this is what I want to avoid rewriting
derivedMember = new double( *(right.derivedMember) );
return *this;
}
【问题讨论】:
-
为什么不使用智能指针?上面的代码有内存泄漏
-
哪些泄漏?我自己看不到...
-
构造函数使用
new来初始化baseMember。这在赋值运算符中被覆盖,而没有使用删除 -
@EdHeal 我现在看到了。我只是跳过了删除的事情来简单的示例代码。我正在工作的这个问题出现的类正确使用了删除。无论如何,谢谢你的提示。我会看看那些智能指针。
标签: c++ inheritance operator-overloading