首页
学习
活动
专区
工具
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>对象的类型信息,并将其打印出来。

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

相关·内容

  • 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.6K30

    探究C++11智能指针之std::unique_ptr

    operator= 均被标记为 =delete),shared_ptr是拷贝构造,伪代码如下: std::unique_ptrT> up1 = std::move(up); std::shared_ptr...T> sp1 = sp; unique_ptr 独占所指向的对象,与shared_ptr不同的是,某个时刻只能有一个unique_ptr指向一个给定对象。...禁止复制语义存在特例,比如,可以通过函数得到一个std::unique_ptr对象,然后返回给up即可: std::unique_ptr clone(int val) { std::unique_ptr...(num); return 0; } std::unique_ptr与std::move不解之缘 std::unique_ptr无法被复制,但可以使用移动构造将std::unique_ptr对象持有的堆内存转移给另外一个对象...,简单代码如下: std::unique_ptr sp(std::make_unique(12345)); std::unique_ptr sp1(std::move(sp

    2.3K10

    【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

    22910

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

    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_ptrT> make_unique(Ts&&... params) { return std::unique_ptrT>(new T(std::forward...= {10,20}; //利用 std::initializer_list型别得构造函数构造 std::vector auto spv1 = std::make_sharedstd::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.3K20

    智能指针探究

    了 我们看它的拷贝构造函数和拷贝赋值运算符 unique_ptr(const unique_ptrT>&) = delete; unique_ptrT>& 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的移动构造函数,

    9210

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

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

    99921
    领券