smart-pointers相关内容
我有一个现有的变量,例如 int a = 3; 我现在如何创建一个 boost::shared_ptr 到 a?例如: boost::shared_ptra_ptr = &a;//这不起作用 解决方案 尽管您应该在变量创建时将其放入托管指针中,以便从现有指针执行此操作. int *a=new int;boost::shared_ptr;a_ptr(a); 也就是说你绝对不想将堆栈变量
..
我有简单的基类和派生类,我希望它们都具有 shared_from_this(). 这个简单的解决方案: class foo : public enable_shared_from_this{无效的 foo_do_it(){cout
..
经过几个小时试图找到 shared_ptr 的位置后,我现在非常沮丧.我看到的示例都没有显示完整的代码以包含 shared_ptr (和工作)的标题.简单地说明 std、tr1 和 根本没有帮助!我已经下载了提升,但仍然没有出现!有人能帮我确切地告诉我在哪里可以找到它吗? 谢谢你让我发泄我的不满! 编辑:我看到我的标题已更改.对于那个很抱歉.所以...也是因为我不清楚 shared_p
..
考虑以下代码. 使用 boost::shared_ptr;结构 B;结构体{~A() { std::cout
..
下面这组指针有什么区别?你什么时候在生产代码中使用每个指针(如果有的话)? 示例将不胜感激! scoped_ptr shared_ptr weak_ptr intrusive_ptr 您在生产代码中使用 boost 吗? 解决方案 智能指针的基本属性 当您拥有可以分配每个智能指针的属性时,这很容易.有三个重要的属性. 完全没有所有权 所有权
..
嗨,我今天问了一个关于 如何插入不同的问题同一向量数组中的对象类型 和我在那个问题中的代码是 门* G[1000];G[0] = 新的与门();G[1] = 新 ORgate;//gate是ANDgate和ORgate类继承的类班级门{...........虚空运行(){//一个虚函数}};类 ANDgate : 公共门{...........无效运行(){//AND 版本的运行}};ORga
..
随着std::unique_ptr 的出现,瑕疵的std::auto_ptr 终于可以平息了.所以在过去的几天里,我一直在更改我的代码以使用智能指针并从我的代码中消除所有 delete. 虽然 valgrind 说我的代码是内存干净的,但智能指针的语义丰富性将使代码更清晰、更易于理解. 在大部分代码中,翻译很简单:使用std::unique_ptr代替拥有对象持有的原始指针,抛出del
..
阅读后这个答案,看起来最好使用 智能指针 尽可能多,并将“普通"/原始指针的使用减少到最低限度. 这是真的吗? 解决方案 不,这不是真的.如果一个函数需要一个指针并且与所有权无关,那么我强烈认为应该传递一个常规指针,原因如下: 没有所有权,因此您不知道要传递什么样的智能指针 如果你传递一个特定的指针,比如shared_ptr,那么你将无法传递,比如,scoped_ptr
..
我有一个返回智能指针的工厂.无论我使用什么智能指针,我都无法让 Google Mock 模拟工厂方法. 模拟对象是一个纯抽象接口的实现,其中所有方法都是虚拟的.我有一个原型: MOCK_METHOD0(Create, std::unique_ptr()); 我得到: "...gmock/gmock-spec-builders.h(1314): error C2248: 'std::un
..
这个程序有什么问题? #include #include int main(){std::vector>vec;整数 x(1);std::unique_ptrptr2x(&x);vec.push_back(ptr2x);//这个微小的命令有一个恶性错误.返回0;} 错误: 在 c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/mingw32/
..
好的,所以上次我写 C++ 为生时,std::auto_ptr 是所有可用的 std lib,而 boost::shared_ptr 是所有可用的愤怒.我从未真正研究过 boost 提供的其他智能指针类型.我知道 C++11 现在提供了 boost 提出的一些类型,但不是全部. 那么有人有一个简单的算法来确定何时使用哪个智能指针吗?最好包括关于哑指针(像 T* 这样的原始指针)和其他 boo
..
在 C++ 实践中,什么是 RAII,什么是 智能指针,这些是如何在程序中实现的,使用带有智能指针的 RAII 有什么好处? 解决方案 RAII 的一个简单(可能被过度使用)示例是 File 类.如果没有 RAII,代码可能如下所示: 文件文件("/path/to/file");//对文件做一些事情file.close(); 换句话说,我们必须确保在完成文件后将其关闭.这有两个缺点 -
..
什么是智能指针,什么时候应该使用? 解决方案 UPDATE 这个答案相当陈旧,因此描述了当时什么是“好",即 Boost 库提供的智能指针.从 C++11 开始,标准库已经提供了足够多的智能指针类型,所以你应该倾向于使用 std::unique_ptr, std::shared_ptr 和 std::weak_ptr. 还有 std::auto_ptr.它非常像一个作用域指针,
..
我阅读了以下文章Antony Williams,据我所知,除了 std::experimental::atomic_shared_ptr 中 std::shared_ptr 中的原子共享计数之外,实际指针到共享对象也是原子的? 但是当我读到安东尼关于 lock_free_stack 的引用计数版本时"noreferrer" rel="nofollow noreferrer">C++ 并发 对
..
我遇到了一个非常奇怪的问题. 代码如下: ::boost::shared_ptrpInfo=CQUserViewDataManager::GetInstance()->GetImageFileInfo(nIndex);图像* pImage=pInfo->m_pThumbnail;如果(pImage==NULL)pImage=m_pStretchedDefaultThumbImage;别的{
..
我在几篇文章中读到,几乎不应该使用原始指针.相反,它们应该始终包含在智能指针中,无论是作用域指针还是共享指针. 然而,我注意到像 Qt、wxWidgets 这样的框架和像 Boost 这样的库从不返回也不期待智能指针,就好像它们根本没有使用它们一样.相反,它们返回或期望原始指针.有什么理由吗?编写公共 API 时是否应该远离智能指针,为什么? 只是想知道为什么在许多主要项目似乎都避免使
..
我正在尝试编写一个算法,如果项目 ID 与参数匹配,它将搜索并从项目向量中删除项目.请参阅下面的示例代码: struct item{项目(int newID){id = newID;}bool operator==(const item& other){return id = other.id;}内部标识};std::vector>vec;vec.push_back(std::unique_pt
..
鉴于我有一个转发声明类型: class Foo; 我想制作一个 unique_ptr到这种类型: unique_ptrpFoo; 这在 visual-studio-2017 但我不能让它在 visual-studio-2012. C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\memory(1150): e
..
如果我让 unique_ptr 指向一个 STL 容器的实例会怎样?这段代码安全吗? unique_ptr>p1(新向量); 这不会导致 vector 的析构函数被调用两次,因为 vector 本身和 unique_ptr 都试图清理 vector 到目前为止获得的内存?这会导致未定义的行为吗?或者编译器是否知道 vector 已经释放了它的内存并且不会为了 unique_ptr 超出范围而再
..
假设我有以下类层次结构: struct Base{};结构派生:公共基础{void DoStuffSpecificToDerivedClass(){}}; 以及以下工厂方法: std::unique_ptr工厂方法(){自动派生 = std::make_unique();派生->DoStuffSpecificToDerivedClass();回报衍生;//不编译} 问题是,return 语
..