我正在尝试复制自定义类的对象Event
.我有一个指向我从其分配中获得的对象的共享指针:
std::shared_ptr<Event> e = std::make_shared<Event>();
Run Code Online (Sandbox Code Playgroud)
为了获得e
(不仅仅是指针的副本)的真实副本,我尝试过:
std::shared_ptr<Event> o = std::make_shared<Event>(*e);
Run Code Online (Sandbox Code Playgroud)
但我不确定这是否是正确的方式,因为如果我删除e
它也会删除o
...
顺便说一句,我还没有定义一个拷贝构造函数,Event::Event(const Event &orig)
但在我的理解中,这并不是必需的,因为编译器提供了一个默认的拷贝构造函数.事件类只包含变量而没有其他指针.
我正在寻找这样的东西:
MyClass::metaObject()->className()
这不起作用,因为在执行此代码时,不存在MyClass的实例化.
如果这在某种程度上是可能的,有没有办法获得从MyClass派生的所有类的名称?
为什么这段代码不起作用?
std::shared_ptr<Event> e = ep->pop();
std::shared_ptr<TrackerEvent> t;
t = std::dynamic_pointer_cast<TrackerEvent>(e);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
/usr/include/c++/4.6/bits/shared_ptr.h:386: error: cannot dynamic_cast '(& __r)->std::shared_ptr<Event>::<anonymous>.std::__shared_ptr<_Tp, _Lp>::get [with _Tp = Event, __gnu_cxx::_Lock_policy _Lp = (__gnu_cxx::_Lock_policy)2u]()' (of type 'class Event*') to type 'class TrackerEvent*' (source type is not polymorphic)
Run Code Online (Sandbox Code Playgroud)
TrackerEvent
继承自Event
所以我猜问题是我不能朝这个方向投.但是ep->pop()
可能会返回一个类型的对象Event
或TrackerEvent
.我希望,当我尝试将其转换为TrackerEvent
并返回NULL
我想知道我是否有一个Event
或TrackerEvent
...
我该怎么办?