实现一个简单的 std::unique_ptr 简介 std::unique_ptr 是一个独占资源所有权的智能指针,通过 RAII 来自动管理资源的构造和析构。 在标准库中,std::unique_ptr 的通常实现是具有空基类优化。具体来讲,对于 std::unique_ptr 的删除器是其类型
1#include <iostream>234std::unique_ptr<char[]> strcat_test(std::initializer_list<constchar*>li)5{6std::size_t size{};7std::for_each(li.begin(), li.end(), [&size](constchar*str)8{ size +=strlen(str); });910std::unique_ptr<char[]> uniq_char(newchar[size +1]);11char*te...
(6) std::shared_ptr的大小是原始指针的两倍,因为它的内部有一个原始指针指向资源,同时有个指针指向引用计数。 (7)引用计数是分配在动态分配的,std::shared_ptr支持拷贝,新的指针获可以获取前引用计数个数。 (8) 可以通过new来构造,还可以通过传入auto_ptr, unique_ptr,weak_ptr来构造,可以通过成员函数use_co...
那么就没有必要使用任何前缀(在我看来,前缀并不会使代码更糟,因为您依赖的是不成文的规则。
_wrapper(std::unique_ptr<int>&& m) : m(std::move(m)) {} std::unique_ptr<int> m; }; void foo(const unique_wrapper* w) { // PROBLEM CODE *(w->m) = 5; } int main() { auto unique_squared = std::make_unique<unique_wrapper>(std::make_unique<int>(0)); foo(unique_...