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...
char, decltype(std::free) *> t_copy { strdup(t), std::free }; 原因是 std::free 的函数类型不保证是 void(void*) 。它保证在传递 void* 时是可调用的,在这种情况下返回 void ,但至少有两种函数类型符合该规范:一种具有 C 链接,以及一个带有 C++ 链接。大多数编译器都不会注意这一点,但为了...
2)当自定义delete操作是函数对象,此时std::unique_ptr所占字节是:裸指针+函数对象大小: classfunctor_class{public:voidoperator()(int*){}private:inta;// 4个字节doubleb;// 8个字节charc[2];// 2个字节};intmain(){std::unique_ptr<int,functor_class>uptr(nullptr,functor_class());std::cout<<si...
std::ofstream("demo.txt") <<'x';//准备要读的文件{ std::unique_ptr<std::FILE, decltype(&std::fclose)> fp(std::fopen("demo.txt","r"),&std::fclose);if(fp)//fopen 可以打开失败;该情况下 fp 保有空指针std::cout << (char)std::fgetc(fp.get()) <<'\n'; }//fclose() 调用...
std::unique_ptrvoid (*)(std::FILE*) > fp(std::fopen("demo.txt", "r"), close_file); if(fp) // fopen 可以打开失败;该情况下 fp 保有空指针 std::cout << (char)std::fgetc(fp.get()) << '\n'; } // fclose() 调用于此,但仅若 FILE* 不是空指针 // (即 fopen 成功) std:...
<< (char)std::fgetc(fp.get()) << '\n'; } // fclose() 调用于此,但仅若 FILE* 不是空指针 // (即 fopen 成功) std::cout << "Custom lambda-expression deleter demo\n"; { std::unique_ptr<D, std::function<void(D*)>> p(new D, [](D* ptr) { std::cout ...
(char)std::fgetc(fp.get())<<'\n';}// fclose() 调用于此,但仅若 FILE* 不是空指针// (即 fopen 成功)std::cout<<"Custom lambda-expression deleter demo\n";{std::unique_ptr<D,std::function<void(D*)>>p(new D,[](D*ptr){std::cout<<"destroying from a custom deleter...\n";...
#include"holder.hpp"#include<iostream>classSomething{public:voidperform()const{std::cout<<"Perform..."<<std::endl;}};voiddo_two_things(){Holder<Something>first{newSomething};first->perform();Holder<Something>second{newSomething};second->perform();}intmain(intargc,char*argv[]){do_two_thing...
classT{public:...int*getPayLoad(){return(int*)serial_payload.data();}private:std::unique_ptr<std::vector<char>>serial_payload;};std::unque_ptr<>read(){charmsg[5]={1,2,3,4,5};autodata=std::make_unique<T>(msg,msg+5);returnstd::move(data);}intmain(){int*data=read()->get...
结构中的字符数组和字符指针 一般情况下我们在结构中都使用字符数组来存储字符串,是否可以使用指向char的指针来代替字符数组呢?...veep = {"abc","def"};//字符串全部存储在结构的内部 struct pnames treas = {"hig","klm"};//字符串全部存储在编译器存储常量的地方(特别注意,是利用指针定义的数组...,...