Итак, я предполагаю, что вы говорите о чем-то вроде этого:
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, он все еще существует и занимает место в памяти. Некоторые компиляторы могут / будут занимать больше места с информацией о типах для помощи в приведении типов, таблиц виртуальных функций и других вещей.