C ++ 11 - 如何使用shared_ptr向量将此对象推入priority_queue?

时间:2015-07-17 08:14:12

标签: c++ c++11 vector shared-ptr priority-queue

我有base class priority_queue,如下所示:

class base
{
   //...
   std::priority_queue<std::shared_ptr<Obj>, std::vector<std::shared_ptr<Obj>>, obj_less> obj_queue;
   //...
}

在我的Obj class上,我有一个方法可以将此对象推送到priority_queue

void Obj::set ()
{
    BaseServer& myObj = BaseFactory::getBase();
    myObj.set(this); //<------ won't compile :(
}

set()会在set()上拨打base class

void base::set(const Obj& o)
{
    obj_queue.push(o);
}

我想使用this来获取指向同一Obj的指针,然后将其推送到我的vector内的priority_queue .... / p>

但它甚至不会编译,我有点迷失......

我在这里缺少什么想法?

2 个答案:

答案 0 :(得分:5)

你实际上不应该这样做,因为它真的很糟糕,你只会在Obj上有原始指针而不是调用{{1功能。您的代码的想法很奇怪,但使用setshared_ptr实际上更好。

enable_shared_from_this

class Obj : public std::enable_shared_from_this<Obj> { public: // ... void set() { BaseServer& myObj = BaseFactory::getBase(); myObj.set(std::shared_from_this()); //<------ won't compile :( } }; 应该有BaseServer功能,在set上接收shared_ptr。当然,您应该在代码中使用Obj,并调用shared_ptr<Obj>。比如像这样的东西

set

答案 1 :(得分:0)

myObj.set(this);

传递指针,但是

void base::set(const Obj& o)

期待一个对象。

void base::set(const Obj *o)
{
    obj_queue.push(*o);
}

或者

 myObj.set(*this);