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

Is it possible to create a smart pointer to an object and pass this smart pointer as an argument to the constructor?

本文关键字:智能 指针 构造函数 参数传递 对象 创建 一个 是否      更新时间:2023-10-16

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

auto player1 = std::make_shared<Player>(argument1, ..smartpointer_to_player1..);

如果您希望一个类对自身有一个shared_ptr(或者更确切地说,它的this指针(,还有另一种方法可以实现这一点,而不是通过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_from_this来获取对this指针的shared_ptr(尽管此函数在构造函数中不可用(。这样做的一个限制是对象需要以前存储在shared_ptr中,否则这将导致未定义的行为(在 C++17 之前(或抛出std::bad_weak_ptr(C++17 及之后(。

在任何情况下,这都可能会为您提供所需的功能,并避免通过构造函数将shared_ptr传递给自身。

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