我最近在某个类(class)遇到了这个奇怪的功能:void*getThis(){returnthis;}稍后在代码中有时会这样使用:bla->getThis()(其中bla是指向此函数所在类的对象的指针被定义为。)而且我似乎无法意识到这有什么好处。是否存在指向对象的指针与对象的this不同的情况(其中bla!=bla->getThis())?这似乎是一个愚蠢的问题,但我想知道我是否在这里遗漏了什么.. 最佳答案 当然,指针值可以不同!下面是一个演示问题的示例(您可能需要在您的系统上使用derived1而不是derived2以获得差异
这个问题在这里已经有了答案:WhenshouldImakeexplicituseofthe`this`pointer?(12个回答)关闭5年前。this关键字的用途是什么。一个类中的方法不能访问同一个类中的其他对等成员吗?什么需要调用this来调用类中的对等方法? 最佳答案 两个主要用途:将*this或this作为参数传递给其他非类方法。voiddo_something_to_a_foo(Foo*foo_instance);voidFoo::DoSomething(){do_something_to_a_foo(this);}允许您
在函数中,如何给this赋值? 最佳答案 您可以将对象this指向:*this=XY;但是你不能直接赋值this:this=&XY;//Error:Expressionisnotassignable 关于c++-如何在C++中为指针'this'赋值,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/13476879/
在过去的几天里,我一直在调试一个涉及C++中lambda的奇怪问题。我已将问题归结为以下症状:this指针在lambda中损坏(注意:this总是被拷贝捕获,因此lambda应该有自己的this指针,指向App对象)只有在std::cout打印语句存在时才会发生,并且在创建lambda之前调用。print语句可能看起来完全不相关(例如print"Hello!")。printf()也表现出相同的行为。仅在交叉编译时发生。使用x86架构的标准编译器可以正常编译和运行(参见example)。如果我在堆上创建lambda(并将指向它的指针保存在App对象中),则不会发生错误。如果关闭优化(即如
我有一个宠物项目,我用它来试验C++11的新特性。虽然我有C方面的经验,但我对C++还是很陌生。为了训练自己掌握最佳实践(除了大量阅读),我启用了一些严格的编译器参数(使用GCC4.4.1):-std=c++0x-Werror-Wall-Winline-Weffc++-pedantic-errors这对我来说效果很好。到现在为止,我已经能够解决所有的障碍。但是,我需要enable_shared_from_this,这给我带来了问题。编译我的代码(可能由-Weffc++触发)时,我收到以下警告(在我的情况下是错误):baseclass‘classstd::enable_shared_fr
classA;classB{public:B(A&a):a(a){}private:A&a;};/*Method1*//*warningC4355:'this':usedinbasememberinitializerlist*//*classA{public:A():b(*this){}private:Bb;};*//*Method2*//*ButIneedtomanuallyperformmemorydellocation.*/classA{public:A(){b=newB(*this);}~A(){deleteb;}private:B*b;};intmain(){}目前,当我尝试
我有以下代码:#includeclassBaseClass{protected:staticintx;};intBaseClass::x;classDerivedA:publicBaseClass{public:DerivedA(){x=3;}};classDerivedB:publicBaseClass{public:DerivedB(){std::cout使用g++编译(g++classtest.cpp)我收到以下错误:classtest.cpp:Inconstructor‘DerivedB::DerivedB()’:classtest.cpp:9:5:error:‘intBase
考虑这段代码:#includeusingnamespacestd;structA{voidf(){cout打印出来的A::fB::fconst&对于B,选择const重载,而不是non-const重载。我想这意味着为*this指定左值ref限定符与根本不指定任何内容不同。这是为什么?“隐式这个参数”是否改变了类型并且const重载现在成为重载决议的更好候选者? 最佳答案 在这种情况下:structA{voidf(){cout对于f两种重载都是可行的,但非const是首选,因为它不需要转换。但在这种情况下:structB{voidf(
这件事最近出现在我担任助教的一个类上。我们正在教学生如何在C++中进行复制构造函数,而最初教Java的学生问你是否可以从另一个构造函数中调用一个构造函数。我知道答案是否定的,因为他们在类里面的代码中使用了迂腐标志,而旧标准不支持这一点。我在Stackoverflow和其他网站上发现了使用new(this)来伪造这个的建议,如下所示classMyClass{private:int*storedValue;public:MyClass(intinitialValue=0){storedValue=newint(initialValue);}~MyClass(){deletestoredVa
如果一个成员函数尝试执行deletethis;会发生什么,就像在下面类的构造函数中一样?classA{public:A(int);~A();int*pi;}A::A(inti){deletethis;pi=newint(i);}A::~A(){deletepi;} 最佳答案 ThisC++FAQ条目很好地回答了这个问题,在此重复:只要小心,对象删除这个是可以的。我是这样定义“小心”的:您必须绝对100%确定该对象是通过new分配的(不是通过new[],也不是通过放置new,也不是堆栈上的本地对象,也不是全局对象,也不是另一个对象的成