是否可以创建一个指向对象的智能指针并将此智能指针作为参数传递给构造函数?

时间:2018-05-09 18:13:20

标签: c++

是否可以创建指向对象的智能指针并将此智能指针作为参数传递给构造函数?我想使用智能指针来指向对象本身的对象。

Select e from Entity e where concat(cast(c.field1 as string),  c.field2) in (:ids)

2 个答案:

答案 0 :(得分:3)

如果您希望某个类对其自身(或者更确切地说是其shared_ptr指针)具有this,则有另一种方法可以通过{{1}来完成此操作,而不是您提出的解决方案}。例如:

std::enable_shared_from_this

通过继承此类,它允许您通过在任何类中调用继承的成员函数class Player : public std::enable_shared_from_this<Player> { //... definition std::shared_ptr<Player> GetPtr() { return shared_from_this(); } }; 来获取shared_ptr this指针。成员函数(虽然此函数在构造函数中不可用)。这个的一个限制是该对象需要先存储在shared_from_this中,否则会导致未定义的行为(在C ++ 17之前)或抛出shared_ptr(C ++ 17及之后)

在任何情况下,这可能会为您提供您想要的功能,并避免通过构造函数将std::bad_weak_ptr传递给自己。

答案 1 :(得分:1)

如果对象需要一个指向自身的共享指针,它应该从std::enable_shared_from_this继承,然后通过在需要它的成员函数中调用shared_from_this()来获取共享指针。