c++ - 将 `this` 传递给子对象

标签 c++ c++17

在使用 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_ptrstd::weak_ptr)。

除此之外,是的,使用原始指针来表示缺乏所有权或反向指针仍然是可以接受的(直到委员会添加某种 std::owned_ptr<T>/std::ptr_view<T> 类)。

关于c++ - 将 `this` 传递给子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58673324/

相关文章:

c++ - 本地类规则是否与 c++14 返回类型推导一致?

c++ - 使用 `void_t`检测多重继承类型重复错误

c++ - gcc - 如何在结构定义中组合 __attribute__((dllexport)) 和 [[nodiscard]]?

c++ - 自定义开关功能中的大量神秘错误

c++ - 存储稍后转发的变量参数

c++ - 结构化绑定(bind)的用例是什么?

c++ - 将节点数组传递给函数并返回节点数组

C++ 3D 模型 io、二进制文件读取 (badbit) 和 #DEN 问题

c++ - C++中 float 的全精度显示?

c++ - c 字符串中的常量