微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我想要一个带有指针成员变量的类.该指针应指向可以进行堆栈分配或堆分配的对象.但是,这个指针不应该有任何所有权.换句话说,当指针超出范围时,根本不应该调用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也必须有一个微不足道的自定义删除器,否则会破坏堆栈以指向自动变量.

原文地址:https://www.jb51.cc/c/111207.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐