我的代码:
Scene::Scene(const std::string &scene_file) : ambient_light(0, 0, 0), background(0, 0, 0){
scene_parser parser(*this);
parser.parse(scene_file);
}
Run Code Online (Sandbox Code Playgroud)
scene_parser是Scene的朋友,在parse方法中它访问(r/w)Scene的成员.这会导致任何问题吗?
是的,可以提供参考this.但是,当其他对象稍后将使用指针时,您通常希望这样做.你的用例看起来会Scene在构造函数完成之前立即使用,这是一个非常滑的斜率.
现在,你在调用之后没有建立任何不变量parse,所以它应该没问题,但是它也很脆弱,并且很容易在将来的更改中引入破坏.
在您的特定示例中,应该不会出现任何问题。
一般来说,给出引用的问题this是两个对象的生命周期并不完全一致,另一个对象可能会在被引用的对象被销毁后尝试访问该对象。
在您的示例中,该scene_parser对象位于堆栈上,因此它的生命周期在Scene构造函数结束时结束。它不可能尝试通过this您提供的引用访问不存在的对象,因此不会出现问题。