在使用 C++17
时,这种将 this
传递和存储到子对象的方法是否仍然被认为是“可接受的”,或者是否有更合适的方法,在符合语言和标准?
我特别询问有关将 Parent
对象作为普通指针传递和存储的问题。
class Child
{
public:
void SetParent(Parent* p)
{
_parent = p;
}
private:
Parent* _parent;
};
class Parent
{
public:
void MyMethod()
{
Child c;
c.SetParent(this);
}
};
最佳答案
C++11 之后你可以使用 std::weak_ptr<Parent>
,假设您使用的是 std::shared_ptr<Parent>
(并继承自 std::enable_shared_from_this
,以便在内部生成 std::shared_ptr
或 std::weak_ptr
)。
除此之外,是的,使用原始指针来表示缺乏所有权或反向指针仍然是可以接受的(直到委员会添加某种 std::owned_ptr<T>
/std::ptr_view<T>
类)。
关于c++ - 将 `this` 传递给子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58673324/