std::vector<std::auto_ptr<int>> myvectors; 当用算法对容器操作的时候(如最常见的容器元素遍历),很难避免不对容器中的元素实现赋值传递,这样便会使容器中多个元素被置为空指针,这不是我们想看到的,会造成很多意想不到的错误。 以史为鉴,作为std::auto_ptr的替代者std::unique_ptr吸取了这个经验教训。下...
② 可以声明以 TUniquePtr 为元素类型的容器,不过元素赋值还是只能通过移动语义,且不能使用容器的初始化列表来初始化: TUniquePtr<int> up = MakeUnique<int>(666); auto GetUniquePtr = [](int _value) { return MakeUnique<int>(_value); }; // 即使通过转移语义或函数返回值,也不能用初始化列表 TArr...
使用auto_ptr要知道:1.智能指针不能共享指向对象的所有权2.智能指针不能指向数组。因为其实现中调用的是delete而非delete[]3.智能指针不能作为容器类的元素。 所以注意:不要用auto_ptr! 不要用auto_ptr! 2、unique_ptr(一种强引用指针) “它是我的所有物,你们都不能碰它!”——鲁迅 正如它的名字,独占 是...
代码语言:javascript 复制 std::vector<std::auto_ptr<int>>myvectors; 当用算法对容器操作的时候(如最常见的容器元素遍历),很难避免不对容器中的元素实现赋值传递,这样便会使容器中多个元素被置为空指针,这不是我们想看到的,会造成很多意想不到的错误。 以史为鉴,作为 std::auto_ptr 的替代者 std::unique...
1 //**我们知道auto_ptr不可做为容器元素.而unique_ptr也同样不能直接做为容器元素,但可以通过一点间接的手段, 例如: 2 unique_ptr<int> sp(new int(88) ); 3 vector<unique_ptr<int> > vec; 4 vec.push_back(std::move(sp)); 5 //vec.push_back( sp ); 这样不行,会报错的. ...
unique_ptr可放在容器中,弥补了auto_ptr不能作为容器元素的缺点。 管理动态数组 自定义资源删除操作。 3. shared_ptr(引用计数型智能指针) 类似vector,智能指针也是模板,当我们创建一个智能指针时,必须提供额外的信息---指针可以指向的类型。 shared_ptr<string> p1; ...
把shared_ptr放入容器中时,之后不再需要全部元素,只使用其中一部分的话,要用erase删除那些不再需要使用的shared_ptr。如果不erase那些不再需要使用的shared_ptr,shared_ptr就不会释放它指向的内存。 六,智能指针的小例子,让多个对象共享相同的状态。 有个类shared_vector,里面有个shared_ptr,指向了一个vector,类sha...
在容器中保存指针有多态性。存放元素基类指针的容器也可以保存其派生类型的指针。当要处理有共同基类的任意对象序列时,这种功能是非常有用的。 保存智能指针要比保存原生指针更安全,因为在对象不再被引用时,自由存储区的对象会被自动删除。因而不会产生内存泄漏。不指向任何对象的指针默认为 nullptr 。
智能指针都是值语义(通常作为类的数据成员或者在stack上或者是标准容器库里面的元素),几乎不会有如下用法: shared_ptr<Foo>* pFoo = new shared_ptr<Foo>(new Foo); 如果智能指针是对象x的数据成员,而他的模板参数T是个incomplete类型,那么x的析构函数不能是默认的或者内联的,必须在cpp文件里面显式定义,否则...
4. 容器与智能指针:C++标准库中的容器(如`std::vector`、`std::map`等)可以与智能指针一起使用,以简化资源管理。例如,可以将`shared_ptr`存储在容器中,以实现对象的共享所有权。三、C++11和C++14中的其他特性除了智能指针外,C++11和C++14还引入了许多其他重要的特性,这些特性进一步增强了C++的表达能力、...