c – 当父类共享指针是返回类型时返回新的基类
发布时间:2020-12-16 07:32:46 所属栏目:百科 来源:网络整理
导读:你有一个父类共享指针返回类型的函数,然后返回一个新的子类,而不是一个共享指针?我不确定共享指针在这些情况下是如何工作的,它们是否像常规指针一样?这是我的例子: BaseEventPtr Actions::getEvent(const std::string nodeName){ if(asLowerCaseString(no
你有一个父类共享指针返回类型的函数,然后返回一个新的子类,而不是一个共享指针?我不确定共享指针在这些情况下是如何工作的,它们是否像常规指针一样?这是我的例子:
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 这也适用于普通(裸)指针.这就是为什么作为一般规则,如果一个类在将来可以作为基类,它应该用虚拟析构函数定义(即使是空的). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |