我正在调用“Foo”实例
实际上,您正在创建类 Foo的实例。
具体来说,您正在通过new()从堆中分配一块内存。这块内存足够大,可以包含Foo::container和Foo所需的任何其他开销类。
(在这个例子中,没有。对于其他类,可能有额外的属性或虚拟指针表。)
自然地,new()调用(也许是默认的?)Foo::Foo()构造函数,而后者又通过std::vector构造函数初始化Foo::container。
变量“容器”的范围是什么?
container是实例foo的属性 [component] 。只要实例foo存在,它就存在。
在范围方面,我们可以说Foo::container。但是如果没有类Foo的实例,您将无法访问Foo::constainer。(例如对象foo。) Foo::constainer没有类Foo的实例就不存在。
(有些类变量的工作方式有所不同,其中一个值在所有实例之间共享。但这里不是这种情况。)
此范围与您的公共/受保护/私人/朋友成员访问控制无关。
例如,在某些Foo::myPublicMethod()中,您可以参考Foo::container。尽管您也可以在这种情况下放弃显式范围,并将其称为container。
请注意,作为私有,您不能在 Foo 类的方法之外访问Foo::container 。
在我删除实例 foo 之前,该变量是否存在?
是的。
我需要将“容器”作为指向向量的指针吗?
不,你可以,但你当然不必这样做。
一般来说,我建议不要将类实例成员作为指针加上构造函数中的 new 和析构函数中的 delete。这是低效和麻烦的。(默认的复制构造函数可以复制指针值,然后析构函数可以删除相同的指针值两次。)
根据您的需要,您可以考虑:
int main(int argc, char* argv[])
{
Foo foo;
// other method calls to which foo is passed
return 0;
}
返回 0后foo将超出范围;,并被自动删除。此外,foo将从堆栈而不是堆中分配。
您可能会发现The Annotated C++ Reference Manual的二手副本很有用。它很旧,但它具有很高的信噪比。