std::auto_ptr不允许存储在STL容器中,例如std::vector.但是,偶尔会出现需要返回多态对象集合的情况,因此无法返回对象vector(由于切片问题)。我可以使用std::tr1::shared_ptr并将它们粘贴在vector中,但随后我不得不为维护单独的引用计数付出高昂的代价,并且拥有实际内存(容器)的对象在逻辑上不再“拥有”这些对象,因为它们可以在不考虑所有权的情况下从中复制出来。C++0x以std::vector>的形式为这个问题提供了完美的解决方案。,但我无权访问C++0x。一些其他注意事项:我无法访问C++0x,但我可以使用TR1。我想避免使用Boost(
我正在尝试了解如何C++03emulationofunique_ptr实现。unique_ptr很像std::auto_ptr但更安全。在auto_ptr会隐式(即静默)转移所有权的情况下,它会吐出编译器错误。例如,一个简单的任务。函数move是模拟unique_ptr安全性背后的关键。问题:为什么有三个move函数?接受引用并将其转换为右值的第三个move函数实现(简化)如下。Tmove(T&t){returnT(detail_unique_ptr::rv(t));}在上面的代码中,到T的显式转换似乎没有必要。事实上,VisualStudio2010在没有显式转换为T的情况下非常满意
structtest_struct{test_struct(){}~test_struct(){}};#include#include#includeintmain(){printf("ctorbegin\n");{std::vector>test_vec;constintcount=100000;for(autoi=0;i我正在使用VS2010,发现了一些荒谬的性能问题。上面的代码在调试和发布版本(ctrl+f5)中都运行良好,但是当附加调试器(f5)时,dtor调用unique_ptr类的速度慢得无法忍受。结果机器代码是相当优化的,所以我不认为这是编译器问题而不是调试器问题,但我不
这不是“如何做”的问题,而是“如何以正确的方式做”的问题我正在Qt中开发一个编辑器,其中不同的小部件显示子项及其(成员)变量。这些小部件中的每一个都应该保存一个指向已编辑子项的引用/指针,以显示和更改它们的成员变量。第一次尝试是我学习(并且仍然有点坚持)的旧ANSIC方法,使用指向所用对象的简单原始指针。它工作正常,但由于C++11标准支持智能指针并建议使用它们,我正在尝试使用它们。问题是,我不太确定在这种情况下使用它们的“最佳方式”是什么......看完SmartPointers:Orwhoownsyoubaby?和WhichkindofpointerdoIusewhen?和其他一些
我一直在玩弄一些Boost组件,我认为在我正在从事的项目中唯一直接需要的是boost::shared_ptr。只包含shared_ptr所需的文件会很困难,或者至少只包含Boostsmart_ptr目录的文件到我的项目中?它们似乎对Boost的其他部分有一些外部依赖性-但我认为有一种简单的方法可以只使用Boost库的某些组件,而我错过了它。如果您能告诉我我需要哪些部分或指出一个好的教程,我将不胜感激! 最佳答案 您可以使用bcp工具仅提取所需的header。bcpshared_ptr/foo这会将shared_ptr和所有依赖项复制
根据C++11,以下代码是否会产生编译错误(如果是,为什么?)还是VC11的问题?#include#include#includestructA{std::vector>v;};intmain(){std::listl;l.sort([](constA&a1,constA&a2){returntrue;});}VisualC++2012产生以下编译错误:1>c:\programfiles(x86)\microsoftvisualstudio11.0\vc\include\xmemory0(606):errorC2248:'std::unique_ptr::unique_ptr':can
我们都知道boost和c++11都支持shared_ptr。有些编译器支持c++11,有些则不支持。我想编写我的代码,以便当编译器支持c++11shared_ptr时,它使用std::shared_ptr;如果没有,请使用boost::shared_ptr。这方面的常见/最佳做法是什么?让我将讨论限制在GCC而不是特定版本。 最佳答案 C++0x/C++11可用性到目前为止,我知道检测GCC是否使用C++0x/C++11的唯一方法是检查预定义宏__GXX_EXPERIMENTAL_CXX0X__:#ifdef__GXX_EXPERI
使用std::shared_ptr表示共享所有权和可选性(可能为空)。我发现自己处于这样一种情况,我只想在我的代码中表达共享所有权,而没有任何选择权。当使用shared_ptr作为函数参数时,我必须让函数检查它是否不为null以保持一致/安全。在许多情况下,传递引用而不是当然是一种选择,但有时我也想转让所有权,因为可以使用shared_ptr。是否有一个类可以替换shared_ptr而不可能为空,是否有一些约定来处理这个问题,或者我的问题没有多大意义? 最佳答案 您正在请求not_null包装器类。幸运的是,C++专家已经解决了您的
当我尝试使用staticconst来初始化unique_ptr时,我收到“undefinedreference”错误。然而,当我新建一个使用相同常量的指针时,符号似乎被神奇地定义了。这是一个重现错误的简单程序:Outside_library.hclassOutside_library{public:staticconstintmy_const=100;};main.cpp#include"Outside_library.h"#include#includeclassMy_class{public:My_class(intnum){m_num=num;};virtual~My_class
我编写了一个c++函数,它组装一些数据,然后将std::shared_ptr返回到新分配的包含数据的std::vector。类似于此的内容:std::shared_ptr>shared_ptr_to_std_vector_of_ints(){autov=std::make_shared>();for(inti=0;ipush_back(i);returnv;}我尝试使用基于范围的for循环遍历vector的内容,但它表现得好像vector是空的。在摆弄之后,我发现我可以通过将从函数返回的值分配给局部变量,然后在循环中引用它来让它按照我的预期运行://Executesloopzeroti