草庐IT

this-page

全部标签

c++ - 为什么仅当我们返回 *this 时才调用 Copy 构造函数?

ClassCents(){intm_val;public:Cents(intx=0){cout(1)}假设我有Centsobjectobj并且正在调用obj.Add()现在输出将是ConstructorCopyconstructor所以我的假设是Here通过在(1)中返回*this我们将*this对象值复制到一个新的临时Cents对象。这就是复制构造函数被调用的原因。现在,如果我将第(1)行替换为CentsAdd(intval){Centstemp;returntemp;}//--->(2)唯一的输出是Constructor为什么没有调用复制构造函数?我对第(1)行的假设是错误的吗?

C++11 lambda捕获 `this`并按值捕获局部变量

下面的lambda函数捕获this(因此bar()可以访问它的实例变量)和局部变量a,b,c.classFoo{intx,y,z;std::function_func;//...voidbar(){inta,b,c;//..._func=[this,a,b,c](){//lambdafuncintu=this->x+a;//...};}};但是如果我想捕获许多实例变量并希望避免在捕获列表中显式命名它们,我不似乎能够做到这一点:_func=[this,=](){//lambdafunc//...};我在this,之后的=处遇到编译器错误:error:expectedvariablenam

c++ - 无法将 'this' 指针转换为类

谁能告诉我为什么在编译此类时出现此错误?classC{public:voidfunc(constC&obj){//body}private:intx;};voidfunc2(constC&obj){obj.func(obj);}intmain(){/*nocodehereyet*/} 最佳答案 C::func()方法不promise它不会修改对象,它只promise它不会修改它的参数。修复:voidfunc(constC&obj)const{//don'tchangeanythismembersorthecompilercompla

c++ - 我们如何在常量成员函数中调用 "delete this; "?

我看到的代码片段如下:classUPNumber{public:UPNumber();UPNumber(intinitValue);...//pseudo-destructor(aconstmemberfunction,because//evenconstobjectsmaybedestroyed)voiddestroy()const{deletethis;}//whythislineiscorrect???...private:~UPNumber();};首先,我确信上面的类定义是正确的。这是我的问题,为什么我们可以像上面那样定义函数'destroy'?问的原因是为什么我们可以在常量

c++ - ISO C++ 15.3.10 : Why is this undefined behaviour?

来自相关的c++标准部分:Referringtoanynon-staticmemberorbaseclassofanobjectinthehandlerforafunction-try-blockofaconstructorordestructorforthatobjectresultsinundefinedbehavior.例如。T::~T(){try{this->nonstatic_member;//iffIreadthequotecorrectly}catch(...){}}那么为什么会出现这种未定义的行为呢? 最佳答案 我认

c++ - "delete this"到一个用 std::shared_ptr 分配的对象?

我知道,每当您使用传统指针为new分配内容时,都可以在C++中说deletethis。事实上,我也知道如果你小心处理它是很好的做法。如果对象被std::shared_ptr持有,我可以让对象说deletethis吗?那应该调用析构函数,对吗?给你一个想法,我正在制作一个游戏,其中一艘船可以发射导弹,我想让导弹自行删除。 最佳答案 不,这不安全,对象的生命周期是由shared_ptr的持有者决定的,所以对象本身不能决定它是否要消亡。如果你这样做,你会得到双倍的当最后一个shared_ptr死亡时删除。我能提供的唯一解决方案是“重新考虑

c++ - 使用带有 "this"的智能指针

我正在学习boost智能指针的使用,但我对某些情况有点困惑。假设我正在实现一个状态机,其中每个状态都由一个更新方法实现。每个状态都可以返回自身或创建一个新的状态对象:structstate{virtualstate*update()=0;//Thepoint:Iwanttoreturnasmartpointerhere};structstateA:publicstate{virtualstate*update(){returnthis;}};structstateB:publicstate{virtualstate*update(){if(somecondition)returnnew

c++ - C++ string erase return *this 是什么意思?

所以C++字符串函数string&erase(size_tpos=0,size_tn=npos)返回*this。那是什么意思?为什么我需要它来返回任何东西?例子stringname="jimmy";name.erase(0,1);将删除j并变成immy,但为什么我需要它来返回任何东西? 最佳答案 用于方法链。例如,删除后,您可以在其上调用==来检查一些内容:stringname="jimmy";boolb=name.erase(0,1)=="immy"; 关于c++-C++stringe

c++ - 在 C++ 中获取 "this"(当前实例)的拷贝

我想要一个当前正在运行的实例的拷贝。当我更改拷贝中的值时,原始对象也会受到影响。拷贝充当实例。如何避免这种情况?我需要创建调用对象的独立拷贝。Setoperator+(Sets){Settemp=*this;for(inti=0;s.elements[i]!='\0';i++){temp(s.elements[i]);}temp.elements[0]='X';// 最佳答案 问题在于Settemp=*this;进行的是浅拷贝,而不是深拷贝。您必须修改Set类的复制构造函数和赋值运算符,以便它们复制所有成员/包含的对象。例如:cla

c++ - 定义非静态成员时在 C++ 中获取 "this"的类型

我正在尝试做一些花哨的模板,但我无意中发现了一个问题:我想在定义非静态成员时在其定义中获取类的类型。这可能吗?(在任何C++版本中。)采用以下代码:templatestructinner{T*this_;/*fancystuff...*/};structfoo{innerbar{this};};类(class)foo有一个非静态成员bar用指针foo*this初始化的.此代码在clang和gcc中编译。但我其实想要inner的定义出现在宏中,这意味着我没有字符串foo在innerbar{this}行中使用.尝试使用:innerbar{this};在C++17中,允许类模板的模板参数推导