我一直在使用这种方法没有任何问题,但我想确定这是一个完全允许的方法还是我只是幸运!
class A
{
public:
void bar()
{
foo(*this);
}
};
void foo(A &a)
{
}
谢谢
答案 0 :(得分:6)
只要void Foo(A&)
(转发)声明,以便A::bar
知道它的存在,它就完全有效且100%允许。
备注强>
我可以在任何地方取消引用this
吗?
不是真的,但是你应该知道一些问题。如果您想在构建对象的初始化列表中使用*this
,请记住您不允许访问虚拟或未初始化通过它的那个对象的成员;无论是直接还是间接。
如果 member-function 被声明为const
,则只允许使用取消引用{{}来调用 const(reference)的函数。 1}} - 指针,见下面的例子。
this
void func (struct Obj&);
void func (struct Obj const&);
struct Obj {
void bar () const {
func (*this);
}
void bar () {
func (*this);
}
};
答案 1 :(得分:4)
是的,这是允许的。请注意,从const方法,您只能将*this
传递给接受const参数的函数:
class B;
void foo(B&);
void bar(B const&);
class B {
void meow() const {
bar(*this); //OK
foo(*this); //ERROR
}
};
答案 2 :(得分:1)
是的,这完全合法。这是您在某些运算符(如赋值运算符)中编写return *this;
时所执行的操作。
答案 3 :(得分:1)
这非常好,并且是“我想要一些其他功能或对象来了解这个对象”的常见模式。
确保参考文件的保存时间不会超过传入的参考文件。