Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Probleme de vitualisation

22 réponses
Avatar
Dominique Vaufreydaz
Bonjour,

j'ai ecrit une classe thread (suis pas le premier, hein ;-P) qui en fait contient une
fonction Run virtuelle pure qui doit etre redefini dans une classe dérivée. Rien
de vraiment difficile. Cette classe thread contient une fonction StartThread()

J'ai rajouté un booléen sur le constructeur du Thread. Si on lui passe true, il
demarre tout seul en appelant StartThread. Je me suis dit que de toute facon,
je ne peux pas instancier la classe Thread (car abstraite du fait du virtual ... = 0).

Le probleme qui se pose (sous g++ uniquement avec comme flags de compilation
-Werror -Wall -pedantic -std=c++98 -fPIC) c'est que je me retrouve avec
des erreurs (et pas a chacune des executions) du genre.
> pure virtual method called
> terminate called without an active exception
> Abort

A priori, pas de debordement ailleurs (je verifie encore) qui justifierait l'ecrasement
de la table des fonctions virtuelles. Des idées ? Notons que le meme mecanisme fonctionne
a merveille sous Visual Studio 2005. Peut-etre un flag a rajouter à g++ ?

Merci d'avance. Doms.

2 réponses

1 2 3
Avatar
Laurent Deniau
James Kanze wrote:
Je ne sais pas, mais je sais qu'il y a plusieurs choses dans
dynamic_cast qui peut le rallentir : il faut qu'il gère les
accès, par exemple, pour ne pas permettre la conversion à une
base privée.


Je le gere aussi (defini dans struct base_info dans object_model.h). Et
cette gestion ne le ralenti pas, elle aurait plutot tendance a
l'accelerer en coupant des branches d'heritage.

Et il peut y avoir du code spécial pour le cas des
objets chargés dynamiquement : je sais que chez Microsoft, il y
une instance des informations par DLL, par exemple, et que donc,
si la comparaison d'adresse échoue, il faut passer par les
comparaisons de chaîne de caractères.


Ca d'accord. Mais un facteur 3, quand meme...

a+, ld.

Avatar
James Kanze
On Apr 12, 9:51 am, Laurent Deniau wrote:
James Kanze wrote:
Je ne sais pas, mais je sais qu'il y a plusieurs choses dans
dynamic_cast qui peut le rallentir : il faut qu'il gère les
accès, par exemple, pour ne pas permettre la conversion à une
base privée.


Je le gere aussi (defini dans struct base_info dans object_model.h). Et
cette gestion ne le ralenti pas, elle aurait plutot tendance a
l'accelerer en coupant des branches d'heritage.

Et il peut y avoir du code spécial pour le cas des
objets chargés dynamiquement : je sais que chez Microsoft, il y
une instance des informations par DLL, par exemple, et que donc,
si la comparaison d'adresse échoue, il faut passer par les
comparaisons de chaîne de caractères.


Ca d'accord. Mais un facteur 3, quand meme...


En effet. Surtout qu'il ne se déclenche que quand la comparaison
d'adresse s'échoue (avec VC++, en tout cas). C-à-d que tant que
la conversion est bonne, et qu'il n'y a pas de chargement
dynamique, jamais.

--
James Kanze (GABI Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


1 2 3