小编Mar*_*arc的帖子

如何在给定shared_ptr的情况下正确复制对象

我正在尝试复制自定义类的对象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)但在我的理解中,这并不是必需的,因为编译器提供了一个默认的拷贝构造函数.事件类只包含变量而没有其他指针.

c++ copy-constructor shared-ptr

17
推荐指数
2
解决办法
3万
查看次数

有没有办法获取QObject派生类的类名而不创建该类的实例化?

我正在寻找这样的东西:

MyClass::metaObject()->className()

这不起作用,因为在执行此代码时,不存在MyClass的实例化.

如果这在某种程度上是可能的,有没有办法获得从MyClass派生的所有类的名称?

c++ qt metaobject

6
推荐指数
2
解决办法
5247
查看次数

使用dynamic_pointer_cast时无法进行动态转换

为什么这段代码不起作用?

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()可能会返回一个类型的对象EventTrackerEvent.我希望,当我尝试将其转换为TrackerEvent并返回NULL我想知道我是否有一个EventTrackerEvent...

我该怎么办?

c++ dynamic-cast shared-ptr c++11

5
推荐指数
1
解决办法
2543
查看次数