通用 OOP - 使用 class constructor/init 内存使用实例化 interface/protocol
General OOP - Instantiating an interface/protocol using a class constructor/init memory usage
例如,如果您创建一个包含 100 个变量和 100 个函数的 class,以及一个包含 10 个函数的接口。前面提到的 class 实现了这个接口。然后将 class 构造为 protocol/interface。您只能访问 10 个功能。
class 中不可见的其余部分会怎样?
它只是不可见,还是真的消失了?
在这种情况下结构的行为是否不同?
如果将其实例化为 class,它会使用更多 RAM 吗?
谢谢!
所以我猜你在谈论这样的事情:
class SomeInterface {
public:
virtual void foo();
}
class SomeClass : public SomeInterface {
public:
char buffer[1024];
virtual void foo() override {
}
}
SomeInterface* inter = new SomeClass();
所以正如你提到的,'inter'只能访问接口的功能,就像我的例子'foo'。
我猜这个问题因您所处理的编程语言而异。我猜只要 'inter' 从未被强制转换为 'SomeClass' 或更高,某些编程语言可能会完全优化 SomeClass 的实例化,假设 'SomeInterface' 不是纯虚拟的,就像在这种情况下.
但是对于你的问题,我可以回答类似 C/C++ 的问题。在这个例子中,如果我们要剖析 'inter' 处的内存,它看起来像这样。
Instance of SomeInterface [0 -> sizeof(SomeInterface)]
Instance of SomeClass [sizeof(SomeInterface) -> sizeof(SomeInterface) + sizeof(SomeClass)]
此映射可能因编译器而异,但在一般意义上,即使您无权访问 'SomeClass' class 实例,它仍然存在并占用 space 在记忆中。一些编译器 may/will 占用更多 space 类型信息以协助转换、虚函数表和其他内容。
例如,如果您创建一个包含 100 个变量和 100 个函数的 class,以及一个包含 10 个函数的接口。前面提到的 class 实现了这个接口。然后将 class 构造为 protocol/interface。您只能访问 10 个功能。
class 中不可见的其余部分会怎样? 它只是不可见,还是真的消失了? 在这种情况下结构的行为是否不同? 如果将其实例化为 class,它会使用更多 RAM 吗?
谢谢!
所以我猜你在谈论这样的事情:
class SomeInterface {
public:
virtual void foo();
}
class SomeClass : public SomeInterface {
public:
char buffer[1024];
virtual void foo() override {
}
}
SomeInterface* inter = new SomeClass();
所以正如你提到的,'inter'只能访问接口的功能,就像我的例子'foo'。
我猜这个问题因您所处理的编程语言而异。我猜只要 'inter' 从未被强制转换为 'SomeClass' 或更高,某些编程语言可能会完全优化 SomeClass 的实例化,假设 'SomeInterface' 不是纯虚拟的,就像在这种情况下.
但是对于你的问题,我可以回答类似 C/C++ 的问题。在这个例子中,如果我们要剖析 'inter' 处的内存,它看起来像这样。
Instance of SomeInterface [0 -> sizeof(SomeInterface)]
Instance of SomeClass [sizeof(SomeInterface) -> sizeof(SomeInterface) + sizeof(SomeClass)]
此映射可能因编译器而异,但在一般意义上,即使您无权访问 'SomeClass' class 实例,它仍然存在并占用 space 在记忆中。一些编译器 may/will 占用更多 space 类型信息以协助转换、虚函数表和其他内容。