Вопросы по теме '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 просмотров

Разве нельзя оптимизировать размер экземпляров класса с виртуальными методами во время выполнения с помощью 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 просмотров

Почему деструктор виртуального класса не добавляется в виртуальную таблицу автоматически?
Когда виртуальный класс 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 просмотров

Vue-bootstrap - когда таблица меняет элементы, кнопки не обновляются
Я начал использовать vue-bootstrap для создания таблицы с элементами. Один из столбцов «действия» содержит кнопку для отображения, редактирования и включения / отключения элемента (изменение активного свойства на true / false) на основе...
567 просмотров
schedule 26.02.2022

Могут ли производные классы иметь более одного указателя на виртуальную таблицу?
Я смотрю выступление BackToBasics: Virtual Dispatch and its Alternatives на CppCon2019. Докладчик говорит, и слайд показывает (при условии, что я правильно понял), что производный класс наследует указатель vtable от базового класса и, кроме того,...
502 просмотров
schedule 21.02.2022