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