我一直在使用这种方法没有任何问题,但我想确定这是完全允许的方法,还是我很幸运!
class A
{
public:
void bar()
{
foo(*this);
}
};
void foo(A &a)
{
}
谢谢你
我一直在使用这种方法没有任何问题,但我想确定这是完全允许的方法,还是我很幸运!
class A
{
public:
void bar()
{
foo(*this);
}
};
void foo(A &a)
{
}
谢谢你
只要(前向)void Foo(A&)
被声明以便A::bar
知道它的存在,它就是完全有效的并且 100% 被允许。
笔记
有什么地方我不能取消引用this
吗?
不是真的,但有几个问题你应该知道。如果要*this
在构造对象的初始化列表中使用,请记住不允许通过它访问该对象的虚拟或未初始化成员;既不直接也不间接。
如果声明了成员函数,则const
仅允许使用取消引用的指针调用采用const (引用)this
的函数,请参见下面的示例。
void func (struct Obj&);
void func (struct Obj const&);
struct Obj {
void bar () const {
func (*this);
}
void bar () {
func (*this);
}
};
int
main (int argc, char *argv[])
{
Obj a;
Obj const b;
a.bar (); /* func (Obj &) */
b.bar (); /* func (Obj const&) */
}
是的,这是允许的。请注意,从 const 方法中,您只能传递*this
给接受 const 参数的函数:
class B;
void foo(B&);
void bar(B const&);
class B {
void meow() const {
bar(*this); //OK
foo(*this); //ERROR
}
};
这非常好,并且是“我希望其他一些函数或对象了解此对象”的常见模式。
只需确保引用的保存时间不会超过传入的引用的生命周期。
是的,这是完全合法的。这就是您在编写return *this;
某些运算符(例如赋值运算符)时所做的事情。