c – 当父类共享指针是返回类型时返回新的基类

c – 当父类共享指针是返回类型时返回新的基类,第1张

概述你有一个父类共享指针返回类型的函数,然后返回一个新的子类,而不是一个共享指针?我不确定共享指针在这些情况下是如何工作的,它们是否像常规指针一样?这是我的例子: BaseEventPtr Actions::getEvent(const std::string& nodeName){ if(asLowerCaseString(nodeName) == "action") re 你有一个父类共享指针返回类型的函数,然后返回一个新的子类,而不是一个共享指针?我不确定共享指针在这些情况下是如何工作的,它们是否像常规指针一样?这是我的例子:

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 – 当父类共享指针是返回类型时返回新的基类全部内容,希望文章能够帮你解决c – 当父类共享指针是返回类型时返回新的基类所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1230531.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存