template< class Y > shared_ptr( const shared_ptr<Y>& r, element_type* ptr ) noexcept; 下面以如下示例代码进行相应说明 #include <iostream> #include <memory> int main() { auto p = std::shared_ptr<int>(new int(4)); int num{10}; auto p1 = std::shared_ptr<int>(p, &num); ...
首先shared_ptr大概包含以下数据单元:指向data field的element_type *类型的指针,以及一个间接的包含了_M_use_count,_M_weak_count的__shared_count(在某些情况下它可能还包含一个deletor对象和一个allocator对象,这一区域被称为control block,__shared_count中包含一个指向这个control block的指针)。 常规的std::...
shared_ptrmeets the requirements ofCopyConstructibleandCopyAssignable. Member types Member typeDefinition element_typeT Member functions (constructor) constructs newshared_ptr (public member function) (destructor) destructs the owned object if no moreshared_ptrs link to it (public member function) operato...
shared_ptr(constshared_ptr<Y>&r, element_type*ptr)noexcept; (8) template<classY> shared_ptr(shared_ptr<Y>&&r, element_type*ptr)noexcept; (8)(since C++20) shared_ptr(constshared_ptr&r)noexcept; (9) template<classY> shared_ptr(constshared_ptr<Y>&r)noexcept; ...
10) 别名构造函数:template <class U> shared_ptr (const shared_ptr<U>& x, element_type* p) noexcept; 默认构造函数 1) 和 2)对象为空(不拥有指针,使用计数为零)。从指针构造3)该对象拥有 p,将使用计数设置为 1。从指针 + 删除器构造 4)与 3) 相同,但该对象还拥有删除器 del 的所有权(并在某...
#include <type_traits> 使用std::is_same模板类进行类型检查。将std::shared_ptr<>的底层类型作为第一个模板参数,将目标类型T作为第二个模板参数。 代码语言:txt 复制 bool isSameType = std::is_same<std::shared_ptr<>::element_type, T>::value; ...
element_type T (C++17 前) std::remove_extent_t<T> (C++17 起) weak_type (C++17 起) std::weak_ptr<T> 成员函数 (构造函数) 构造新的 shared_ptr (公开成员函数) (析构函数) 如果没有更多 shared_ptr 指向持有的对象,则析构对象 (公开成员函数) operator= 对shared_ptr 赋值 ...
T* get() const noexcept; (C++17 前) element_type* get() const noexcept; (C++17 起) 返回存储的指针。 参数(无) 返回值存储的指针。 注解shared_ptr 可能在存储指向一个对象的指针时共享另一对象的所有权。get() 返回存储的指针,而非被管理指针。 示例...
element_type T (until C++17) std::remove_extent_t<T> (since C++17) weak_type (since C++17) std::weak_ptr<T> Member functions (constructor) constructs new shared_ptr (public member function) (destructor) destructs the owned object if no more shared_ptrs link to it (public...
element_type&operator[](std::ptrdiff_tidx)const; (since C++17) Index into the array pointed to by the stored pointer. The behavior is undefined if the stored pointer is null or ifidxis negative. IfT(the template parameter ofshared_ptr) is an array typeU[N],idxmust be less thanN, oth...