gpt4 book ai didi

c++ - 当父类共享指针为返回类型时返回新的基类

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:11:58 27 4
gpt4 key购买 nike

你能不能有一个父类共享指针返回类型的函数,然后返回一个新的子类而不是一个共享指针?我不确定共享指针在这些情况下如何工作,它们是否像常规指针一样?这是我的例子:

BaseEventPtr Actions::getEvent(const std::string& nodeName)
{
if(asLowerCaseString(nodeName) == "action")
return new ActionEvent(&m_interface);

return nullptr;
}

在这种情况下,ActionEvent 是 BaseEvent 的子类。

干杯!

最佳答案

如果 BaseEventPtr 是一个智能指针,它应该没问题。

基本上,当没有更多引用时,共享指针会在真实指针上调用delete。如果基类定义了虚拟析构函数delete 会调用适当的子类的析构函数。

例如:

class NonVirtualBase {};
class NonVirtualSubclass: public NonVirtualBase {};

shared_ptr<NonVirtualBase> ptr( new NonVirtualSubclass() ); // NOT OK!

class VirtualBase
{
virtual ~VirtualBase() {}
};

class VirtualSubclass: public VirtualBase {};

shared_ptr<VirtualBase> ptr( new VirtualSubclass() ); // OK

这也适用于普通(裸)指针。这就是为什么作为一般规则,如果一个类将来可能作为基类,它应该用虚拟析构函数定义(即使是空的)。

关于c++ - 当父类共享指针为返回类型时返回新的基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12862474/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com