Вопросы по теме 'vtable'
Виртуальные таблицы методов
При обсуждении запечатанных классов довольно часто упоминается термин "виртуальная таблица функций". Что именно это? Некоторое время назад я читал о таблице методов (я тоже не помню цель этой цели), и google/поиск здесь дает результаты, связанные с...
21364 просмотров
schedule
30.12.2023
Почему произошло исключение при получении адреса COM-функции?
Я получаю адрес функции COM, загружая библиотеку типов (TLB) и перебирая типы, используя ITypeLib и ITypeInfo . После вызова функции AddressOfMember ITypeInfo я столкнулся со следующим исключением:...
311 просмотров
schedule
24.05.2022
Как vtables реализованы в С++ и С#?
Возьмем такую ситуацию (в С++, в С# классы A, B являются интерфейсами):
class A { virtual void func() = 0; };
class B { virtual void func() = 0; };
class X: public A, public B { virtual void func(){ var = 1; } int var;};
X * x = new X; // from...
3247 просмотров
schedule
15.03.2024
Как работает таблица виртуального наследования в g++?
Я пытаюсь лучше понять, как виртуальное наследование работает на практике (то есть не в соответствии со стандартом, а в реальной реализации, такой как g++ ). Собственно вопрос выделен внизу жирным шрифтом.
Итак, я построил себе граф наследования,...
583 просмотров
schedule
09.03.2024
Разве нельзя оптимизировать размер экземпляров класса с виртуальными методами во время выполнения с помощью g++?
Я только что проверил размер класса, содержащего десятки виртуальных методов, с помощью g++ (4.7), потому что я слышал, что указатели используются для виртуальных методов, и я подумал, что это будет ужасная реализация, так как она будет занимать 80...
282 просмотров
schedule
03.10.2022
Объяснение виртуальной таблицы
Возможный дубликат: Понимание записей vtable
Использование g++ версии 4.6.3, 64-битная машина. Я знаю, что компилятор может свободно реализовывать виртуальные функции так, как он хочет. Я хочу знать, что здесь произошло.
Мои...
2730 просмотров
schedule
31.08.2023
виртуальные функции в статических библиотеках
Когда у меня есть абстрактный базовый класс foo , определенный в libX.a
class foo {
virtual void bar() = 0;
};
... и производный класс foo_impl , определенный в libY.a
class foo_impl : public foo {
void bar() { /* do...
1438 просмотров
schedule
02.08.2023
Ошибка компоновщика: неопределенная ссылка на vtable
Кажется, у меня проблема с проектом wxWidgets, над которым я работаю. Я все время получаю ошибку компоновщика vtable для класса, который не задействует какие-либо виртуальные функции. Мне было интересно, может ли кто-нибудь пролить свет на эту...
1795 просмотров
schedule
11.06.2023
Оптимизировал ли компилятор виртуальный вызов?
У меня есть этот С++, который создает два производных объекта, а затем много раз вызывает вызов виртуальной функции:
Parent* d;
Child1 d1[1];
Child2 d2[1];
if(__rdtsc() & 1 != 0){
d = d1;
}
else{
d = d2;
}
for(unsigned long long i...
233 просмотров
schedule
02.08.2022
Виртуальная таблица в полиморфизме
Я прочитал много сообщений, и все говорят, что виртуальная таблица предназначена для каждого класса, а не для каждого объекта, а объект имеет только указатель _vtpr на общую vtable. Но, пожалуйста, рассмотрите этот пример:
class Base
{
public:...
1078 просмотров
schedule
27.03.2024
если vtable создается во время компиляции, почему эта ошибка является ошибкой компоновщика, а не ошибкой компиляции?
Следующий фрагмент кода дает мне ошибку
неопределенная ссылка на `vtable for Derived'
Код :
#include <iostream>
class base{
public:
base(){}
virtual ~base(){}
virtual void test()
{
}
};
class...
356 просмотров
schedule
01.02.2022
Почему виртуальный метод генерирует неопределенную ссылку на _sbrk?
Это изящно компилируется:
class dummy {
};
Это жалуется на неопределенную ссылку на _sbrk:
class dummy {
virtual ~dummy();
};
Почему виртуальный метод генерирует неопределенную ссылку на _sbrk ?
Раньше я думал, что vtable...
417 просмотров
schedule
12.01.2023
Компилятор и v-таблица
Я знаю, как работают виртуальные функции и динамический полиморфизм. Я знаю, что компилятор добавит v-ptr в базовый класс, который будет унаследован последующими производными классами. Кроме того, компилятор создаст v-таблицы для каждого класса и...
112 просмотров
schedule
14.09.2022
c++ vtable в множественном наследовании, указатель на метод thunk
Я прочитал эту статью: https://shaharmike.com/cpp/vtable-part2/
И я не могу понять, почему в vtable (в конце статьи) у нас есть этот указатель:
0x400918 0x400820 невиртуальный переход к Child::FatherFoo()
но не указатель непосредственно на...
581 просмотров
schedule
27.09.2022
Почему деструктор виртуального класса не добавляется в виртуальную таблицу автоматически?
Когда виртуальный класс B является производным от виртуального базового класса A, если явно не объявлен виртуальный деструктор в A и B, деструктор B в виртуальной таблице будет указывать на деструктор A. Почему? Почему деструктор vtable B...
134 просмотров
schedule
26.09.2022
Как распечатать виртуальную функцию VTable по определенному адресу при отладке с помощью GDB
Я пытаюсь напечатать с помощью GDB Debugger имя виртуальной функции, которая существует в VTable по определенному адресу памяти.
Вот мой простой код:
#include <iostream>
class Parent {
public:
virtual void Foo() {}
virtual void...
928 просмотров
schedule
04.09.2023
Как vptr и vtable работают в приведенном ниже виртуальном коде?
Насколько я знаю, когда мы делаем виртуальную функцию в базовом классе, указатель, на который можно ссылаться как vptr, создается компилятором, а vtable содержит записи виртуальной функции, которые являются последней версией для этого класса в случае...
70 просмотров
schedule
01.05.2022
унаследованы ли vptr и vtable от базового класса?
Как видно, D3 представляет новую виртуальную функцию @function3() в середине цепочки наследования. Мне интересно, что происходит с *--vptr и vtable, когда это происходит. D3 теперь является своего рода новым базовым классом,
class Base {...
249 просмотров
schedule
12.02.2023
Vue-bootstrap - когда таблица меняет элементы, кнопки не обновляются
Я начал использовать vue-bootstrap для создания таблицы с элементами. Один из столбцов «действия» содержит кнопку для отображения, редактирования и включения / отключения элемента (изменение активного свойства на true / false) на основе...
567 просмотров
schedule
26.02.2022
Могут ли производные классы иметь более одного указателя на виртуальную таблицу?
Я смотрю выступление BackToBasics: Virtual Dispatch and its Alternatives на CppCon2019. Докладчик говорит, и слайд показывает (при условии, что я правильно понял), что производный класс наследует указатель vtable от базового класса и, кроме того,...
502 просмотров
schedule
21.02.2022