在VC 8中替换auto_ptr
std :: auto_ptr在VC 8中被破坏(这是我们在工作中使用的).我的主要抱怨是它允许auto_ptr< T> x = new T();这当然会导致可怕的崩溃,而很容易做错误.
从answer到另一个问题stackoverflow:
我想用 > boost :: scoped_ptr,用于不应该通过所有权的指针. 但是由于std :: auto_ptr对我来说是坏的,我想知道最好的方法是什么: >将std :: auto_ptr替换为来自网络的东西.像这个this一个来自Rani Sharoni(还没有尝试过). 更新: 做了一些小的测试: class T { public: T() { OutputDebugStringA("Tn"); }; ~T() { OutputDebugStringA("~Tn"); }; }; { fix::auto_ptr<T> x(new T); // This just works. } { fix::auto_ptr<T> x = (new T); // Doesn't compile. Great! } { fix::auto_ptr<T> x = fix::auto_ptr<T>(new T); // Transfer of ownership works also. } 当然,这些测试并不是详尽的,你不应该相信他们.实施一个异常安全的模板类是有毛皮的业务.至少这比内置的更好. 注意:关于版权,我不知道我是否被允许使用这个实现.我已经通过电子邮件发送给Rani,我正在等待回复.当我知道更多时,我会更新这篇文章. 谢谢你的回复. 解决方法
移动以提高智能指针.
在此期间,您可能希望从旧的/另一个STL中提取一个工作的auto_ptr实现,因此您有工作代码. 我相信auto_ptr语义基本上是破碎的 – 它可以保存打字,但是界面实际上并不简单:您还需要跟踪当前所有者的哪个实例,并确保所有者离开最后. unique-ptr“修复”,通过发布不仅放弃所有权,而且将RHS设置为null.它是auto-ptr的最接近的替代品,但它具有不同的语义,它不是一个替代品. 有一个介绍性的文章boost smart pointers,由,我,我. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |