首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

std :: list <std :: unique_ptr <T >>:传递它

代码语言:cpp
复制
#include <iostream>
#include <list>
#include <memory>
#include <typeinfo>

class T {
public:
    // 类T的声明
};

int main() {
    // 创建一个std::unique_ptr<T>对象,并把它添加到std::list<std::unique_ptr<T>>中
    std::list<std::unique_ptr<T>> lst;
    lst.push_back(std::make_unique<T>());

    // 遍历std::list<std::unique_ptr<T>>中的元素,并访问它们的T类型
    for (const auto& ptr : lst) {
        const std::type_info& info = typeid(ptr.get());
        std::cout << "Object of type " << info.name() << " found." << std::endl;
    }

    return 0;
}

以上代码首先包含了必要的头文件,然后创建了一个std::list<std::unique_ptr<T>>对象,其中T是一个用户定义的类型。接着,我们使用std::make_unique<T>来创建一个std::unique_ptr<T>对象,并将其添加到std::list<std::unique_ptr<T>>中。最后,我们使用typeid操作符来获取std::unique_ptr<T>对象的类型信息,并将其打印出来。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MSVC std::unique_ptr 源码解析

::unique_ptr p0 = std::unique_ptr(new int { 1 }); std::unique_ptr p1 = std::unique_ptr..._Compressed_pair _Compressed_pair 是 std::unique_ptr 内部用于存储 deleter 和裸指针的工具,从字面意思来看,实现的功能和 std::pair...接下来看一下 std::unique_ptr 的各种构造和 operator=,首先是默认构造: template <class _Dx2 = _Dx, _Unique_ptr_enable_default_t...的区别在于,它不需要传递额外参数,直接使用目标类型的默认构造,下面是源码: #if _HAS_CXX20 // FUNCTION TEMPLATE make_unique_for_overwrite...总结 std::unique_ptr 有两个定义,分别针对普通类型和数组类型 std::unique_ptr 第二个模板参数是删除器,不传递的情况下使用的是 default_delete std::unique_ptr

1.6K10
  • wchar_t*,wchar_t,wchat_t数组,char,char*,char数组,std::string,std::wstring,CString 以及system(command)

    用system("pause>nul")  就可以了 wchar_t*,wchar_t,wchat_t数组,char,char*,char数组,std::string,std::wstring,CString...--------------------------------- // 将单字符 string 转换为宽字符 wstring inline void Ascii2WideString( const std...::string& szStr, std::wstring& wszStr ) { int nLength = MultiByteToWideChar( CP_ACP, 0, szStr.c_str()...NULL}; CString   cStr; std::string str; // 注:设置语言环境以便输出WideChar setlocale(LC_ALL,"chs"); // 注: char*...lpDefaultChar和pfUsedDefaultChar:只有当WideCharToMultiByte函数遇到一个宽字节字符,而该字符在uCodePage参数标识的代码页中并没有的表示法时,WideCharToMultiByte

    2.5K30

    【C++11】{}初始化、std::initializer_list、decltype、STL新增容器

    Date(int year, int month, int day)" << endl; } private: int _year; int _month; int _day; }; 2.2 std...,那不清楚的话我们可以打印看一下的类型是什么: 大家看,的类型是一个叫做initializer_list的东西。 那为什么这个东西可以赋值给vector呢?...它可以在构造函数或函数参数中以列表的形式传递一组值。...这是的一些接口 那我们接下来做一件事情: 我们之前不是模拟实现过STL里面的各种容器的,那以vector为例,我们来对改造一下,让它也支持用initializer_list进行{}初始化和赋值...演示代码 把上面演示过的代码给大家: #define _CRT_SECURE_NO_WARNINGS #include using namespace std; //struct

    19210

    智能指针在面试中得重要地位!

    std::unique_ptr的第二个实参的型别,本例为 delInvmt的型别 //先创建一个空的 std::unique_ptr,使指向适当型别对象,然后返回,delInvmt作为构造函数的第二个实参.../** std::shared_ptr不得不使用更多的内存,但是该部分内存却不属于 std::shared_ptr对象的一部分,位于堆上:控制块 std::shared_ptr 指涉到 T 型别的对象的指针...,替代手法是使用 std::make_shared,但是使用了自定义析构器,无法用std::make_shared 2,如果必须将一个裸指针传递std::shared_ptr的构造函数,直接传递 new...Ts> std::unique_ptr make_unique(Ts&&... params) { return std::unique_ptr(new T(std::forward...= {10,20}; //利用 std::initializer_list型别得构造函数构造 std::vector auto spv1 = std::make_shared<std::vector<

    1K20

    ROS2中零拷贝实现进程内节点之间的高效通信

    std::unique_ptr :一个std::unique_ptr会指向一个对象且不允许其他指针指向。...这里的期望是节点每秒来回传递一次消息,每次都增加消息的值。因为该消息是作为unique_ptr发布和订阅的,所以在开始时创建的相同消息将持续被使用。...但是对于watermark_node和两个图像可视化节点之间的链接,关系是一对多的,因此如果图像可视化节点使用unique_ptr回调,则不可能将同一指针的所有权传递给这两个节点。...然而,它可以传递给其中一个。哪一个将获得原始指针并没有定义,而只是最后一个被传递。 注意,图像可视化节点未订阅unique_ptr回调。相反使用const shared_ptrs订阅。...这意味着系统向两个回调传递相同的shared_ptr。处理第一个进程内订阅时,内部存储的unique_ptr将升级为shared_ptr。每个回调将接收同一消息的共享所有权。

    2.2K20

    智能指针探究

    了 我们看的拷贝构造函数和拷贝赋值运算符 unique_ptr(const unique_ptr&) = delete; unique_ptr& operator=(const unique_ptr...但是如果这样写呢 unique_ptr p1(new int); unique_ptr p2(std::move(p1)); 运行后发现是可以的,那是为什么呢 再看的源码...> p1(new int); unique_ptr p2(std::move(p1)); unique_ptr(unique_ptr &&src) 是unique的移动构造函数,接收一个右值引用作为参数...当你使用std::move函数将一个unique_ptr对象转化为右值引用并将其传递给另一个unique_ptr对象来初始化时,就会调用这个构造函数 unique_ptr& operator=(unique_ptr...,并且使用new int动态分配内存来存储一个int类型的对象 第四行代码创建另一个unique_ptr对象p2,并且使用std::move()将p1转化为右值引用并传递给p2的移动构造函数,

    7710

    Modern C++ 最核心的变化是什么?

    右值引用是 C++11 中最重要的新特性之一,解决了 C++ 中大量的历史遗留问题,使 C++ 标准库的实现在多种场景下消除了不必要的额外开销(如 std::vector, std::string),...所以随着移动语义的引入,std::unique_ptr 放入 std::vector 成为理所当然的事情。 容器中存储 std::unique_ptr 有太多好处。...使用 vector>,完全无需显式析构,unqiue_ptr 自会打理一切。完全不用写析构函数的感觉,你造吗?...7.std::thread 的传递 thread 也是一种典型的不可复制的资源,但可以通过移动来传递所有权。...同样 std::future std::promise std::packaged_task 等等这一票多线程类都是不可复制的,也都可以用移动的方式传递

    98621

    Chapter 4: Smart Pointers

    不能拷贝,只能移动,析构时非空的 std::unique_ptr 会销毁的资源,默认情况下, std::unique_ptr 会对内部的原始指针使用 delete 来释放原始指针所指向的资源。...有两种形式,一种是针对单个对象( std::unique_ptr ),另一种是针对数组( std::unique_ptr ),针对单个对象时,不能使用 运算,而针对数组对象时不能使用...Ts> std::unique_ptr make_unique(Ts&&... params) { return std::unique_ptr(...std::make_shared std::make_unique std::allocate_shared: 表现地和 std::make_shared 一样,除了第一个参数是用于动态内存分配的分配器对象...,如果要使用花括号初始器来构造智能指针,必须直接使用 new ,但是完美转发不能直接转发花括号初始化列表,必须先保存为 std::initializer_list 对象,然后在传递std::make_XX

    1.6K20
    领券