make_unique和make_shared有什么异同点?
时间: 2023-10-24 18:27:07 浏览: 258
make_unique和make_shared是C++中用于创建动态分配的智能指针的函数模板。它们的主要区别在于所管理对象的所有权和内存管理策略。
不同点:
1. 所有权:make_unique返回一个std::unique_ptr,它是独占所有权的智能指针,只能有一个指针指向对象。而make_shared返回一个std::shared_ptr,它是共享所有权的智能指针,可以有多个指针指向同一个对象。
2. 内存管理:make_unique使用new运算符在堆上分配内存,并负责释放分配的内存。make_shared使用一个控制块来管理内存,通过引用计数来跟踪指向对象的指针数量,并在不再需要时自动释放内存。
相同点:
1. 用法和语法类似,都是通过模板函数创建智能指针。
2. 都可以用于动态分配单个对象。
需要注意的是,make_shared通常比make_unique更高效,因为它可以将对象和引用计数控制块一起分配在一块连续的内存上,减少了内存分配的开销。但是,make_shared可能会导致内存占用较高,因为即使没有指针指向对象,控制块也会保持对象的内存直到最后一个指针被销毁。因此,在选择使用make_unique还是make_shared时,需要根据实际情况进行权衡。
相关问题
make_shared和make_unique
make_shared和make_unique都是C++标准库中的函数模板,用于创建智能指针对象。它们的作用是方便地创建一个动态分配的对象,并将其管理在一个智能指针中。
make_shared用于创建一个shared_ptr对象,它采用引用计数的方式管理所指向的对象。当有一个新的shared_ptr
make_unique/make_shared
make_unique和make_shared都是C++11中添加的函数模板,用于创建智能指针对象。
make_unique用于创建unique_ptr对象,这种智能指针只能有一个指针指向对象,不允许共享所有权。
make_shared用于创建shared_ptr对象,这种智能指针允许多个指针指向同一个对象,并且使用引用计数来跟踪指针的数量,当所有指针都释放后,对象也就被释放了。
总的来说,make_unique适用于需要独占所有权的场景,而make_shared适用于需要共享所有权的场景。
阅读全文