草庐IT

copy_pointer

全部标签

c++ - C/C++ : Pointers within Const Struct

如何在函数fn中强制obj->val1指向的内存的常量性?#includestructfoo{int*val1;int*val2;int*val3;};voidfn(constfoo*obj){//Idon'twanttobeabletochangetheintegerthatval1pointsto//obj->val1=newint[20];//Ican'tchangethepointer,*(obj->val1)=20;//ButIcanchangethememoryitpointsto...}intmain(intargc,char*argv[]){//Ineedtobeabl

c++ - 在 Clang 中禁用 "cast from pointer to smaller type uint32_t"错误

我正在从事一个学校项目,该项目涉及在实验硬件上移植一大段C++代码。不幸的是,该硬件是64位的,并且代码包含许多指针算术实例,这些实例期望指针是32位的,即它通常是reinterpret_cast(ptr)。.一个一个地浏览它们会非常乏味,而且由于无论如何这是一个实验项目,我很乐意接受一个“hackish”的解决方法。因此,我修改了malloc的实现,以确保它永远不会分配超过4GB限制的内存。因此,从技术上讲,这些类型转换应该是有效的。问题是,我该如何向Clang解释这一点?我得到的错误是:error:castfrompointertosmallertype'uint32_t'(aka

c++ - 为什么我们需要 "this pointer adjustor thunk"?

我从here中读到有关调整器的信息.这是一些引述:Now,thereisonlyoneQueryInterfacemethod,buttherearetwoentries,oneforeachvtable.Rememberthateachfunctioninavtablereceivesthecorrespondinginterfacepointerasits"this"parameter.That'sjustfineforQueryInterface(1);itsinterfacepointeristhesameastheobject'sinterfacepointer.Buttha

c++ - 关于 Copy-On-Write 和 shared_ptr 的困惑

我已经在网上搜索并通读了有关shared_ptr的Boost文档。SO上有一个响应,说写时复制(COW)的shared_ptr很糟糕,TR!已将其从字符串库中删除。大多数关于SO的建议都说使用shared_ptr而不是常规指针。该文档还讨论了使用std::unique()来制作COW指针,但我还没有找到任何示例。谈论的是拥有一个为您执行COW的智能指针,还是让您的对象对克隆对象使用新的shared_ptr然后修改克隆对象?示例:食谱和配料structNutrients;structIngredient{Ingredient(conststd::string&new_title=std:

C++为什么vector初始化会调用copy constructor

当你用下面的方式初始化一个vector时:std::vectorMyVec(10);它调用默认构造函数一次,然后再调用复制构造函数10次。所以,如果我没理解错的话,vector中的对象都是拷贝构造函数生成的。有人可以解释调用复制构造函数而不是默认构造函数的原因吗?或者甚至只是在没有对象的情况下分配内存? 最佳答案 它将分配没有对象的内存,除非您指定初始大小为10,因此它必须创建10个对象。如果你想要存储10个对象而不实际创建它们,你可以这样做:std::vectorMyVec;MyVec.reserve(10);如果你看一下你正在使

c++ - std::move 和 std::copy 是否相同?

我尝试做类似的事情:std::copy(std::make_move_iterator(s1.begin()),std::make_move_iterator(s1.end()),std::make_move_iterator(s2.begin()));出现这个错误:error:usingxvalue(rvaluereference)aslvalue*__result=std::move(*__first);这让我感到困惑。如果您使用std::move,也会发生同样的事情。看起来GCC内部使用了一个名为std::__copy_move_a的函数,它move而不是复制。使用std::co

c++ - c++ : error: must use '.*' or '->*' to call pointer-to-member function in function 中的函数指针

代码片段如下。无法理解为什么会出现此错误。voidSipObj::check_each_field(){map::iteratormsg;stringstr;charname[20];boolres=false;sscanf(get_payload(),"%s%*s",name);LOGINFO(lc())second;res=(this).*sip_field();}}typedefbool(SipObj::*sip_field_getter)();staticmapsip_field_map;sip_field_getter是函数名的占位符 最佳答案

c++ - 当涉及分配器时,是否有类似于 copy-and-swap 习惯用法的东西?

关于copy-and-swap习语有几个很好的答案,例如explainingthecopyandswapidiom和explainingmovesemantics.适用于复制和移动分配的基本习惯用法如下所示:T&T::operator=(Tother){this->swap(other);return*this;}此作业适用于复制和移Action业,因为other复制或移动构造取决于赋值的右侧是左值还是右值。现在让有状态分配器进入画面:ifT在分配器类型上进行参数化,例如std::vector,上面的成语并不总是有效!具体来说,std::allocator_traits包含三种类型,指

c++ - C++ 是否为纯虚拟类创建默认值 "Constructor/Destructor/Copy Constructor/Copy assignment operator"?

C++编译器是否为这个“类”生成默认函数,如Constructor/Destructor/Copy-Constructor...?classIMyInterface{virtualvoidMyInterfaceFunction()=0;}我的意思是不可能实例化这个“类”,所以我认为没有生成默认函数。否则,人们会说您必须使用虚拟析构函数。这意味着如果我不定义析构函数virtual它将默认创建,而不是virtual。此外,我想知道为纯虚拟接口(interface)定义虚拟析构函数是否合理,如上所示?(所以这里没有使用指针或数据,所以不需要破坏任何东西)谢谢。 最

c++ - 没看懂Stroustup先生建议删除抽象类Shape的copy default和move操作

我试图理解作者在他的新书(TCPL第4版)中3.3.4SuppressingOperations中的建议,但无济于事。书摘Usingthedefaultcopyormoveforaclassinahierarchyistypicallyadisaster:Givenonlyapointertoabase,wesimplydon’tknowwhatmembersthederivedclasshas(§3.3.3),sowecan’tknowhowtocopythem.So,thebestthingtodoisusuallytodeletethedefaultcopyandmoveoper