基于C语言以来的规定,C++无法区分指针是“指向单对象”还是“指向array”。C++规定,对于数组应该使用delete[]而不是delete。所以以下语句是错误的: std::unique_ptr<std::string> up(newstd::string[10]); C++标准库为unique_ptr提供了一个偏特化的版本用来处理array,这个版本会在遗失其所指对象的拥有权时,对该...
1.6 unique_ptr对于array的使用 1.7 标准库unique_ptr的默认形式 1.8 自定义deleter 当我们在unique_ptr结束时不再紧紧是调用delete或delete []时,我们就需要自定义deleter,然而此处的deleter定义方式不同于shared_ptr,你必须具体指明unique_ptr的类型的第二个模板参数,该类型可以时reference to function、function poin...
#include<iostream>#include<vector>#include<memory>#include<cstdio>#include<fstream>#include<cassert>#include<functional>structB{virtualvoidbar(){std::cout<<"B::bar\n";}virtual~B()=default;//父类的析构函数需要定义为虚函数,防止内存泄漏};structD:B{D(){std::cout<<"D::D\n";}~D(){s...
// Create a unique_ptr to an array of 5 integers.autop = make_unique<int[]>(5);// Initialize the array.for(inti =0; i <5; ++i) { p[i] = i; wcout << p[i] <<endl; } 如需更多範例,請參閱make_unique。 另請參閱
1.2悬空指针(Dangling Pointer)悬空指针指的是一个指针指向已经释放的内存,这时再通过这个指针访问内存...
std::cout << "c.use_count() = " << c.use_count() << std::endl; // 2 cout<shared_ptr循环引用的内存泄漏问题解决 如下,在两个需要互相引用的类的内部,使用weak_ptr智能指针引用对方,来避免循环引用导致的内存泄漏问题。 #include#includeclass Child; ...
shared_ptr 和 weak_ptr 则是 C+11 从准标准库 Boost 中引入的两种智能指针。此外,Boost 库还提出了 boost::scoped_ptr、boost::scoped_array、boost::intrusive_ptr 等智能指针,虽然尚未得到 C++ 标准采纳,但是在开发实践中可以使用。 二、实现原理
{std::unique_ptr<D,std::function<void(D*)>>p(new D,[](D*ptr){std::cout<<"destroying from a custom deleter...\n";delete ptr;});// p 占有 Dp->bar();}// 调用上述 lambda 并销毁 Dstd::cout<<"Array form of unique_ptr demo\n";{std::unique_ptr<D[]>p{new D[3]};}//...
// in another thread. // Lock(sp) send(sp.get(), length); // This smart pointer must not...
C++11 已将其摒弃,并提出了 unique_ptr 替代 auto_ptr。虽然 auto_ptr 已被摒弃,但在实际中仍可使用,但建议使用更加的 unique_ptr,后文会详细叙述。shared_ptr 和 weak_ptr 则 C+11 从准标准库 Boost 中引入的两种智能指针。此外,Boost 库还提出了 boost::scoped_ptr、boost::scoped_array、boost::...