gpt4 book ai didi

c++ - 相同的地址,多个 shared_ptr 计数器,C++ 标准是否禁止?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:28:26 25 4
gpt4 key购买 nike

假设我有如下需求(这只是讨论C++标准的一些想象代码,所以我不会讨论为什么我这样设计它,所以不要打扰我这样的事情:你的设计错误。)

T* ptr = new T;
shared_ptr<T> p(ptr);
shared_ptr<T> q(ptr, SomeDeleterThatDoesnotDeleteButDoSomeOtherStuff());

假设逻辑保证 p 或它的某些拷贝比 q 的所有拷贝生命周期更长,那么实际上不会有任何问题。我的问题是,它是否被 C++ 标准禁止,例如C++ 标准明确声明为 UB,以便不同的 shared_ptr 计数器共享相同的地址?

谢谢。

最佳答案

如果第一个 shared_ptr 对象被销毁,那么您会得到 UB,因为使用第二个的对象可能会访问已释放的对象。

由于您确保第一个 shared_ptr 对象的生命周期比第二个长,因此您不会获得 UB。

关于c++ - 相同的地址,多个 shared_ptr 计数器,C++ 标准是否禁止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11079770/

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