草庐IT

this-page

全部标签

c++ - enable_shared_from_this 和堆栈上的对象

有没有办法阻止shared_from_this()调用堆栈分配的对象?基类列表中的enable_shared_from_this是类用户的强指标,但有没有办法强制正确使用?示例代码:classC:publicenable_shared_from_this{public:shared_ptrmethod(){returnshared_from_this();}};voidfunc(){Cc;shared_ptrptr=c.method();//exceptioncomingfromshared_from_this()} 最佳答案 因此

c++ - 为什么 operator = 返回 *this?

假设我想覆盖operator=这样我就可以做类似的事情Polyp1;//anobjectrepresentingapolynomialPolyp2;//anotherobjectofthesametypep2=p1;//assignsallthecontentsofp1top2然后在我的operator=实现中,我有这样的东西:Poly&Poly::operator=(constPoly&source){//Skippingimplementation,italreadyworksfine…return*this;}不要介意实现,它已经运行良好。我担心的是当您返回*this时会发生什么

c++ - 区别 b/w Objective C 的 self 和 C++ 的 this?

有人能说出Objective-C的self和C++this指针之间的区别吗? 最佳答案 主要区别是this是一个关键字,而self是一个变量。这样做的结果是,虽然this总是引用正在执行特定方法的对象,但Objective-C方法可以自由修改self在执行期间。这有时被构造函数使用,它在失败时设置self=nil。这样做的原因是:这样子类(使用self=[superinit]链式初始化器)可以看到初始化失败的时间,并且知道不要在自己的初始化器中继续。组合对象可以看到失败并知道它们没有有效的组件。一些初始化器会将self设置为一个不同

c++ - C++ 中 this* 的类型

这听起来可能很愚蠢。在C++prime第5版P258中,它说:bydefault,thetypeofthisisaconstpointertothenonconstversionoftheclasstype.forexample,bydefault,thetypeofthisinaSales_datamemberfunctionisSales_data*const.我可以理解,因为this*是一个const指针,这意味着它指向的对象一旦初始化就不能改变。但是它说:althoughthisisimplicit,itfollowsthenormalinitializationrules,w

c++ - 使用 this-> 访问成员是否有任何开销?

当访问某个类的成员时,我可以使用例如:this->myVar=10或者我可以写:myVar=10我喜欢使用this->,因为它显式声明变量是此类的成员,但与仅使用变量名本身相比,它会产生任何开销吗?作为替代方案,我可以为变量添加一个唯一的前缀,例如_TmyVar,但我已经使用this->很长时间了,所以我只是想知道。 最佳答案 没有开销。编译器将为两个版本生成完全相同的代码。 关于c++-使用this->访问成员是否有任何开销?,我们在StackOverflow上找到一个类似的问题:

c++ - 为什么即使模板类没有基类, `this` 也是类型依赖表达式?

下面的代码可以编译无误:templatestructA{voidf(){this->whatever;}//whateverisnotdeclaredbefore};intmain(){Aa;}我知道这是因为this是一个类型相关的表达式,它为whatever进行名称查找被推迟,直到知道实际的模板参数。由于成员函数f()在这种情况下从未使用过,因此没有实例化A::f存在,并为whatever查找名称永远不会执行。我可以理解this如果类模板有一个依赖于类型的基础,那么它是依赖于类型的:templatestructB{Twhatever;};templatestructA:B{voidf

c++ - 是否有正当理由不从复制赋值运算符返回 *this ?

这个问题在这里已经有了答案:Whymustthecopyassignmentoperatorreturnareference/constreference?(8个答案)关闭7年前。设foo是一个带有复制赋值运算符的结构或类:structfoo{foo&operator=(constfoo&);//orwithsomeotherreturntype?};曾经是否有合理的理由从operator=()返回*this以外的任何内容?将它用于与赋值无关的事情并不合理。

c++ - 我们可以在构造函数中使用 'this' 指针吗

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:C++usingthispointerinconstructors如题,我可以做类似下面的代码吗?classA;classB{public:B(A*p);...};classA{Bm;public:A():m(this){}~A(){}};

c++ - 我们什么时候应该使用 std::enable_shared_from_this

我刚知道std::enable_shared_from_this表格thislink.但是看了下面的代码,不知道什么时候用。try{Goodnot_so_good;std::shared_ptrgp1=not_so_good.getptr();}catch(std::bad_weak_ptr&e){//undefinedbehavior(untilC++17)andstd::bad_weak_ptrthrown(sinceC++17)std::cout上面的代码“不太好”,因为不存在shared_ptr打电话前getptr().所以好的应该是:std::shared_ptrgp1=st

c++ - new (this) 是什么意思?

我找到了这个代码示例进行研究:T&T::operator=(Tconst&x){if(this!=&x){this->~T();//destroyinplacenew(this)T(x);//constructinplace}return*this;}当我查看thedocumentation时对于new没有采用指针的版本。因此:新(这个)是什么意思?它的用途是什么?文档中没有列出怎么能这样调用呢? 最佳答案 它被称为“placementnew”,您的代码片段中的注释几乎可以解释它:它在括号中指定的地址中构造了一个T类型的对象,但没有