我希望 A 类从 B 类继承,而 A 没有自己的 B 实例化
想法是在堆上创建一个 B 对象(使用 B new)并提供指向 A 的指针。A 之后将使用这个对象来解决继承问题。
这是我想做的一个例子:
B* b = new B();
b->myBmethode();
{
A(b);
A.myBmethode();
} // A destroyed
b->myBmethode();
delete b;
我希望 A 类从 B 类继承,而 A 没有自己的 B 实例化
想法是在堆上创建一个 B 对象(使用 B new)并提供指向 A 的指针。A 之后将使用这个对象来解决继承问题。
这是我想做的一个例子:
B* b = new B();
b->myBmethode();
{
A(b);
A.myBmethode();
} // A destroyed
b->myBmethode();
delete b;
不,这是不可能的(如果我正确理解了您的问题)。
3.7.5
成员子对象、基类子对象和数组元素的存储时长为其完整对象的存储时长
如果 B 是在 A 之外创建的,则在 A 被删除后 B 不会被自动删除,除非你明确地这样做,
创建一个接口 IA,让 A 和 B 都实现该接口。对于 B,只需将所有真正的实现委托给 B。
B 的生命周期取决于您的设计。你希望它什么时候被销毁?如果有意义,您也可以制作 B 单例。
class IA {
virtual doA() = 0;
}
class A: public IA {
virtual doA();
}
class B: public IA {
B(A&a);
virtual doA(){
a.doA();
}
private:
A&a;
}
//init
A* a = A::getInstance();
B *b = new(*a) ;
b->doA();
您不能从引用继承,但通过这样的事情,您可以做到一半:
#include<functional>
...
struct A : std::reference_wrapper<B>{
// using std::reference_wrapper<B>::reference_wrapper; // inherit constructor
};
https://en.cppreference.com/w/cpp/utility/functional/reference_wrapper