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也必须有一个微不足道的自定义删除器,否则会破坏堆栈以指向自动变量.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...