C++使用new和delete来管理动态内存,会出现1、内存泄漏(忘记释放内存);2、悬空指针(内存已被释放还在使用);3、野指针(未初始化的指针)。
C++引用智能指针,负责自动释放所指向的对象。
C++的智能指针定义在头文件中,1、shared_ptr:允许多个指针指向同一个对象;2、unique_ptr:“独占”所指向的对象;3、weak_ptr:弱引用,指向shared_ptr所管理的对象。
// 最安全的分配和使用动态内存的方法是调用一个名为make_shared()函数。
shared_ptr sp = make_shared(1); // 不传递值得话,初始化未0
// 可以使用解引用*来获得指针sp指向的对象
cout << *sp << endl;
// 可以使用get()函数来返回sp指针
cout << sp.get() << endl;
// 可以使用拷贝赋值
shared_ptr sp2(sp);
// 可以使用use_count()函数来获得计数器的计数
cout << sp.use_count() << endl;
// 将内置指针转换为智能指针
shared_ptr sp3(new int(1024));
unique_ptr不支持普通的拷贝或赋值 *** 作。
weak_ptr是一种不控制所指向对象生存期的智能指针,它指向一个由shared_ptr管理的对象,将一个weak_ptr绑定到一个shared_ptr不会改变shared_ptr的引用计数。
一旦最后一个指向对象的shared_ptr被销毁,对象就会被释放,即使有weak_ptr指向对象,对象还是会被释放。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)