从 C++ 中的两个类继承并插入到列表中
inherit from two classes in c++ and inserting into list
下面的代码是否与将继承自两个类的对象插入列表有关?
class A
{
}
class B
{
}
class C : public A, public B
{
}
C *myObj = new C();
std::list<A*> myList;
myList.push_front(myObj);
创建类型 A 的列表并插入属于类型 B 的 C 类型的对象是否有问题?我知道这段代码可以编译,但我对内存问题很感兴趣。如果这是一个问题,我还有什么其他选择来解决这个问题?
只要列表通过引用或指针存储数据,并且析构函数是虚拟的,
就可以了。基本问题是不允许将C存储到A
变量中,但可以将其存储到A&
或A*
中。因此,A a = C()
就像将 C 存储到list<A>
或vector<A>
中一样糟糕。这将导致切片
从技术上讲,只要您将对象的引用或指针添加到列表中以避免切片并具有虚拟析构函数,您就应该是安全的。
您可以将A
和B
视为多态类型的接口。看看这个例子:
class Drawable
{
public:
virtual ~Drawable() { }
virtual void draw();
};
class Circle : public Drawable
{
public:
void draw() { std::cout << "Drawing a circlen"; }
}
class Square : public Drawable
{
public:
void draw() { std::cout << "Drawing a squaren"; }
}
int main()
{
std::list<Drawable*> shapeList { new Square(), new Circle(), new Square() };
}
相关文章:
- 使用继承的指针列表复制构造函数或重载运算符=
- C++:继承和列表函数作为类成员的问题
- C++具有继承列表的模板声明
- 继承向量/数组/列表并更改其大小
- 与lambda一起使用虚拟继承在初始化列表中捕获此问题的GCC错误
- 如何对 std::各种继承类的列表求和C++
- 使用类继承将单个喜欢的列表转换为双向链表
- 我如何避免明确构建C 初始化列表中继承的所有内容
- 对具有继承功能的结构使用初始值设定项列表
- 将initalizer列表与从空基类继承的结构一起使用
- 正确的语法,用于在C 中继承,并具有初始化列表和内存分配
- 从 C++ 中的两个类继承并插入到列表中
- 迭代继承的类 C++ 的列表
- 使初始化列表与 C++ 中的继承一起使用
- 为boost mpl列表中的每种类型继承容器
- 初始值设定项列表未检测到公共继承的成员
- 在C++中使用指针列表(继承还是性能?
- 有没有办法在继承构造函数时访问初始值设定项列表
- 虚拟继承会中断初始化列表显式构造函数调用
- 我如何使用 no除非我从继承列表中选择特定的隐藏函数