加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 没有所有权的堆栈对象的指针

发布时间:2020-12-16 03:28:58 所属栏目:百科 来源:网络整理
导读:我想要一个带有指针成员变量的类.该指针应指向可以进行堆栈分配或堆分配的对象.但是,这个指针不应该有任何所有权.换句话说,当指针超出范围时,根本不应该调用delete.我认为一个原始的指针可以解决问题…但是,我不知道如果有一个比原始指针更好的C11方法? 例
我想要一个带有指针成员变量的类.该指针应指向可以进行堆栈分配或堆分配的对象.但是,这个指针不应该有任何所有权.换句话说,当指针超出范围时,根本不应该调用delete.我认为一个原始的指针可以解决问题…但是,我不知道如果有一个比原始指针更好的C11方法?

例:

class foo{
public:
    bar* pntr
};

int main(){
    bar a;
    foo b;
    b.pntr=&a;
}

解决方法

原始指针在这里非常好. C 11没有任何其他处理非拥有对象的“哑”智能指针,因此您不能使用C 11智能指针. X- 20045 X- 200 200 X- 200 200 X- 200 200:20045 200:20045 200 X-

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4282.pdf

新新p新新新新200新200新200新200新200新200新200新新200新200新200新200新200新200新200新200新200新200新200新200新200新200新200新200新200新新200新200新200新新200新新200新200新200新新200新新200新200新新200新

200新X-45旗新新新新新新旗新新旗新新新旗新新旗新新旗新新旗新新旗新新旗新新旗新新旗新新旗新新200新新旗新新200新新新旗新新旗新新旗新新旗新新旗旗号

#include <memory>

int main()
{
    int a{42};

    auto no_op = [](int*){};
    std::unique_ptr<int,decltype(no_op)> up(&a,no_op);
}

或者,如@ T.C所述.在评论中,一个std::reference_wrapper.

正如@Lightness Races in Orbit所提到的,std::weak_ptr也可能是一个解决方案,因为后者也是一个不拥有的智能指针.但是,std :: weak_ptr只能从std::shared_ptr或其他std :: weak_ptr构造.严重的缺点是std :: shared_ptr是一个“沉重”的对象(因为内部引用计数机制).请注意,即使在这种情况下,std :: shared_ptr也必须有一个微不足道的自定义删除器,否则会破坏堆栈以指向自动变量.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读