如何使用智能指针指向同级类对象?

问题描述 投票:0回答:1

我对新的智能指针有点困惑。我想用一个指针指向同级类(同一个父类)的两个不同对象。

所以基本上我有一个父类

Parent
和两个子类
Child1
Child2

class Parent{
    virtual void foo() = 0;
};

class Child1 : public Parent{
    void foo(){
        //something
    }

}

class Child2 : public Parent{
    void foo(){
        //something different
    }

}

指针say

ptr
首先指向
Child1
,然后它应该指向
Child2

这样做我想使用相同的指针根据这些同级类内的实现来表现不同的行为。

我想,

Parent ptr = new Child1()
一种非智能指针方式,如果我这样做,应该在这种情况下工作
(Child2 *)ptr

但我确信通过智能指针会有更好的方法。

我知道 reinterpret_ptr 确实有一些围绕这个主题的用例,但我无法理解 gfg 的解释。另外我的主要问题是如何声明这个指针?

unique_ptr<Parent> ptr = make_unique<Child1>();

c++ inheritance abstract-class smart-pointers
1个回答
0
投票

Parent ptr = new Child1()
不会编译,因为
ptr
未声明为指针。您需要添加一个
*
,例如:

Parent *ptr = new Child1();

现在,

(Child2 *)ptr
未定义行为,因为
Child1
对象不是有效的
Child2
对象,反之亦然,所以你不能只对指针进行类型转换。您需要指向一个完整的单独的
Child2
对象,例如:

Parent *ptr = new Child1();
...
delete ptr;
ptr = new Child2();
...
delete ptr;

不要忘记向

virtual
添加
Parent
析构函数!

现在,您可以使用智能指针做同样的事情,例如:

unique_ptr<Parent> ptr = make_unique<Child1>();
...
ptr = make_unique<Child2>();
© www.soinside.com 2019 - 2024. All rights reserved.