gpt4 book ai didi

c++ - 如何保持常量正确性和 RAII?

转载 作者:搜寻专家 更新时间:2023-10-31 01:04:47 25 4
gpt4 key购买 nike

我有类似的情况包括:

class A
{
public:
A(shared_ptr<B>);
}

class B : public enable_shared_from_this<B>
{
const shared_ptr<A> a;
}

我不能在构建之前将 shared_ptrB,所以在初始化 a 之前。所以,我需要在构造后初始化我的常量字段(我认为它否认 RAII),或者只是稍后构造它(所以它不能是常量,所以它否认常量正确性,而且看起来不太一致RAII)。

这看起来很常见。有没有最干净的方法来处理这个问题?你会怎么做?

最佳答案

我会通过不使用 const 成员来解决这个问题,简单明了。它们通常比它们的值(value)更麻烦(例如,它们使类不可分配,甚至不可移动分配)。

a 是私有(private)的,因此只有类本身可以访问它。因此,记录“a 初始化后永远不应修改!!!”就足够了。如果您担心这还不够(或者类(class)有您无法控制的 friend),您可以像这样使它更加明显:

class B : public enable_shared_from_this<B>
{
const std::shared_ptr<A>& a() { return _use_this_ONLY_for_initialising_a; }

std::shared_ptr<A> _use_this_ONLY_for_initialising_a;
};

关于c++ - 如何保持常量正确性和 RAII?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23358003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com