我有以下设置(简化):
class A {
public:
void doBar() { B b; b.bar(); }
private:
int foo;
class B {
public: void bar() { /* do somehting with foo */ }
};
};
现在,VS告诉我:
非静态成员引用必须相对于特定对象
嗯,好吧,这听起来很合理。但是,由于此类B
对A
是私有的,我可以确定它永远不会在A
的(特定)实例的实例之外使用(好吧,静态方法A
是一个例外)。
那么底线,是否有机会从A
的方法获取B
的当前实例,即B b
实例化的实例?我特别想找一个干净的解决方案,否则我只是传递参考资料。
答案 0 :(得分:2)
在另一个类中声明一个类不会创建“包含”,只会创建类声明的范围。 B
对象不包含A
个对象,除非您根据彼此之间的引用来制作它们。
所以,不;没有B
能够确定A
的哪个实例创建它的机制,因为这种情况没有什么特别之处。
考虑一下:B
对象是在您的示例中的堆栈上创建的,但它可能已经堆分配。 A
对象也可能已在堆上使用'new'创建,或者在堆栈上,或在自定义堆上创建,或者通过'placement-new'创建。内存中的两个对象之间没有任何关系。