假设我们有一个Abstract类和一个子类(派生自抽象)类。我知道我们可以像这样derivedClass
实例化:
AbstractBase *foo = new DerivedClass1();
但是,这是定义顶线代码的正确方法:
AbstractBase foo = *(new DerivedClass1());
我不想通过指针声明Abstract
类。但是,做到这一点并管理记忆泄漏的最佳方法是什么?
非常感谢
答案 0 :(得分:3)
AbstractBase foo = *(new DerivedClass1());
将尝试使用构造函数构造AbstractBase
的实例(您不能做,这是抽象的),该构造函数接受类型DerivedClass1
的对象(或者它可以转换的东西)到。
如果您不希望最终得到指向AbstractBase
的指针,但您确实希望使用new
动态分配对象,那么您可能需要:
AbstractBase& foo = *(new DerivedClass1());
从新AbstractBase
DerivedClass1
的引用
答案 1 :(得分:1)
这是一个如何“链接”复制构造函数的非常简单的示例。请注意,语法可能有点偏,但这是一般的想法:
class ABase {
public:
ABase(const ABase& ab) {
basevar = ab.getBasevar();
}
int getBasevar() { return basevar; }
private:
int basevar;
};
class c1 : public ABase {
public:
c1(const c1& c) : ABase(c) {
cvar = c.getCvar();
}
private:
int cvar;
};
特别注意在函数声明和定义之间使用:
运算符;这个空间允许在构造函数中进行多个直接赋值(也可能在其他函数中),其内容称为“initialization list”。另请注意this answer,其中详细介绍了一些示例。