类和对象的空间分配
例如
Class CA
{
int a;
int Add(...);
}
int main()
{
CA object;
...
}
当程序运行时,进程会不会开辟一个空间来保存class CA 的结构,不同于具体的对象。当需要创建对象object的时候,利用这个结构来为object开辟一个空间,记录成员变量的值,并且将“结构空间”中的函数指令复制到object的空间中。我理解的对吗?
另外,当我创建object对象后,把那个“结构空间”卸载掉,object还能正常运行吗?
扩展开来说,当我们加载一个dll,使用里面的类创建一个组件后,然后将这个dll卸载,组件还能正常运行吗?
[解决办法]
没有考虑过这种问题,不过感觉上,如果class没有虚函数的话,卸载dll没有问题
[解决办法]
应该是没有这样一个“结构空间”的。当你分配一个对象时,你传递给new算符的是整个结构体的大小,new返回给你的是一个指针,系统对这个指针是什么样的object并不关心,所以你把它解释成任何类型的指针都能用。至于当你把它当成某种object的指针然后引用其中的成员时,编译器翻译成汇编语言实际上是存取某个offset的内存区。也就是说在编译前这种结构信息是给程序员看的,编译后计算机就不需要这种信息了。
至于用dll中的类分配一个对象,然后卸载dll,程序能够继续运行,因为这个对象是分配在你的进程空间中,跟那个dll没关系,你load和unload一个dll其实无非是操作一些代码而已,当然也可能有一些全局变量。
[解决办法]
恩,支持 苏泊尔耗 的观点
[解决办法]
class 只是个数据类型而已, 把它看作 "int",
另外它有一些成员函数,public的和全局函数一样来看待,protected:和private: 是只能被 public 的函数调用的.
CA object;
int nNum;
不一样吗?