草庐IT

std::weak_ptr<void>绑定到std::shared_ptr<T>

最近在忙自己的研究生科研工作和尽量在不看源码的情况下写一个玩具版的muduo(我已经看过陈硕的《Linux多线程服务端编程:使用muduoC++网络库》,相当于按自己的理解再写一遍),没太有时间写C++对象模型的后面部分,等组会开完后再继续写。今天就写一下几天前看到的一个小技巧,也即标题:std::weak_ptr绑定到所有类型的std::shared_ptr。std::weak_ptr我们知道weak_ptr目的是为了防止只使用std::shared_ptr导致的循环引用,从而导致内存泄漏。一个经典的例子如下:#include#include#include#includeclassChil

智能指针思想实践(std::unique_ptr, std::shared_ptr)

1smartpointer思想​ 个人认为smartpointer实际上就是一个对原始指针类型的一个封装类,并对外提供了->和*两种操作,使得其能够表现出原始指针的操作行为。​ 要理解smartpointer思想首先要了解一个概念RAII(ResourceAcquisitionIsInitialization),直译为资源获取即初始化,核心理念为在对象创建时分配资源,而在对象销毁时释放资源.​ 根据RAII理念,如果对象创建在栈(stack)上,由于栈上的对象在销毁是会自动调用析构函数,因此仅仅需要在构造函数内完成资源分配,而在析构函数内完成资源释放,此时程序员就不需要自己关心资源的释放

智能指针思想实践(std::unique_ptr, std::shared_ptr)

1smartpointer思想​ 个人认为smartpointer实际上就是一个对原始指针类型的一个封装类,并对外提供了->和*两种操作,使得其能够表现出原始指针的操作行为。​ 要理解smartpointer思想首先要了解一个概念RAII(ResourceAcquisitionIsInitialization),直译为资源获取即初始化,核心理念为在对象创建时分配资源,而在对象销毁时释放资源.​ 根据RAII理念,如果对象创建在栈(stack)上,由于栈上的对象在销毁是会自动调用析构函数,因此仅仅需要在构造函数内完成资源分配,而在析构函数内完成资源释放,此时程序员就不需要自己关心资源的释放

C++11 智能指针 shared_ptr

C++11智能指针shared_ptrWrittenon2023-01-16个人学习智能指针记录合集:C++11智能指针C++11智能指针shared_ptrC++11智能指针unique_ptrC++11智能指针weak_ptrstd::shared_ptr共享智能指针,也被称为计数智能指针。共享智能指针会记录有多少个共享智能指针指向同一个对象,当这个数为0的时候,程序自动的默认释放(析构)这个对象,记录有多少个的这个方法叫做引用计数。共享智能指针可以有多个共享智能指针同时管理同一个对象。举个栗子普通指针管理#include#includeusingnamespacestd;classPer

C++11 智能指针 shared_ptr

C++11智能指针shared_ptrWrittenon2023-01-16个人学习智能指针记录合集:C++11智能指针C++11智能指针shared_ptrC++11智能指针unique_ptrC++11智能指针weak_ptrstd::shared_ptr共享智能指针,也被称为计数智能指针。共享智能指针会记录有多少个共享智能指针指向同一个对象,当这个数为0的时候,程序自动的默认释放(析构)这个对象,记录有多少个的这个方法叫做引用计数。共享智能指针可以有多个共享智能指针同时管理同一个对象。举个栗子普通指针管理#include#includeusingnamespacestd;classPer

Golang error : "scannable dest type ptr with >1 columns (3) in result"

项目中的dao层,我们用来查询数据库,获取想要数据。有时我们会需要查询数据给结构体赋值,并返回一个结构体指针,如下//结构体字段已与数据库对应funcGetCommunity(idint)(community*model.CommunityDetail,errerror){ sql:=`selectcommunity_id,community_name,introductionfromcommunitywherecommunity_id=?` err=db.Get(&community,sql,id) iferr!=nil{ return } return}这样的代码看似没有问题,但其实并不

Golang error : "scannable dest type ptr with >1 columns (3) in result"

项目中的dao层,我们用来查询数据库,获取想要数据。有时我们会需要查询数据给结构体赋值,并返回一个结构体指针,如下//结构体字段已与数据库对应funcGetCommunity(idint)(community*model.CommunityDetail,errerror){ sql:=`selectcommunity_id,community_name,introductionfromcommunitywherecommunity_id=?` err=db.Get(&community,sql,id) iferr!=nil{ return } return}这样的代码看似没有问题,但其实并不

IP rDNS(PTR)信息从理解到情报挖掘

什么是IP的rdns信息?  过去很多人,将IP的rDNS信息理解为解析到IP的反查域名信息。IP的rDNS信息和IP反查域名信息完全是两个不同的信息。IP的rdns信息被称之为反向DNS解析(rDNS),即通过DNS解析系统来将IP地址解析为域名。根据RFC1912标准“每一个互联网可以访问的主机都应该有一个名字”,所以rDNS信息更多是对应到一个IP地址的名字。IP的反查域名是指根据域名解析到IP的记录来反查出哪些域名解析到这个IP地址上。下面以8.8.8.8来说明IP的反查信息和rDNS信息的区别。  通过命令nslookup可以直接获取到8.8.8.8的rDNS信息”dns.googl

IP rDNS(PTR)信息从理解到情报挖掘

什么是IP的rdns信息?  过去很多人,将IP的rDNS信息理解为解析到IP的反查域名信息。IP的rDNS信息和IP反查域名信息完全是两个不同的信息。IP的rdns信息被称之为反向DNS解析(rDNS),即通过DNS解析系统来将IP地址解析为域名。根据RFC1912标准“每一个互联网可以访问的主机都应该有一个名字”,所以rDNS信息更多是对应到一个IP地址的名字。IP的反查域名是指根据域名解析到IP的记录来反查出哪些域名解析到这个IP地址上。下面以8.8.8.8来说明IP的反查信息和rDNS信息的区别。  通过命令nslookup可以直接获取到8.8.8.8的rDNS信息”dns.googl

关于 r:tapply 与 FUN = function(x){} 的用法

usageoftapplywithFUN=function(x){}在我的任务中,我想按性别找到温度的平均值。我们可以通过tapply命令来做到这一点。我也不允许使用平均命令:1tapply(df$temperature,df$gender,FUN=function(x){sum(x)/length(df[,1])})但它给了我错误的结果。它只是将结果除以2,而不是找到两个性别的平均值。我该如何解决?因为聚合函数一切正常:1 aggregate(df$temperature,by=list(df$gender),function(x){sum(x)/length(x)})@jogo,"我也不允