IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

SL & STL C++ Discussion :

std::string, operator =


Sujet :

SL & STL C++

  1. #1
    tut
    tut est d�connect�
    Membre �clair�
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Par d�faut std::string, operator =
    salut,
    je r�cup�re des std::string, allou�e dans une DLL, en utilisant l'op�rateur = :

    StringExe = StringDll;

    Quand je passe dans le destructeur de la classe qui contient les cha�nes de l'exe, j'ai un plantage (en mode Debug) sur CrtIsValidHeapPointer(); qui indique que le destructeur tente de lib�rer de la m�moire allou�e dans la DLL.

    Question : l'operateur = de std::string, fait une vraie recopie physique ? nouvelle espace m�moire, etc ?

  2. #2
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    Mauvaise nouvelle : il ne faut pas utiliser la STL dans les exports d'une dll... Ta dll est compil�e avec un autre compilo je pr�sume, un compilo qui a sa propre STL qui op�re diff�rement parrapport � ta STL, le linker n'y voie que du feux, et boum.

  3. #3
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    M�me avec le m�me compilo, �a risque de planter. Chaque DLL a sa propre zone d'allocation (tas), donc si tu d�truis avec une DLL une variable allou�e dans l'autre, boom aussi...

    Une solution est en g�n�ral d'utiliser la version dynamique de la biblioth�que standard, ainsi plus de probl�me.

    Question : l'operateur = de std::string, fait une vraie recopie physique ? nouvelle espace m�moire, etc ?
    Ca d�pend de la strat�gie impl�ment�e dans ta STL : si elle utilise le Copy-On-Write, probable que non.

  4. #4
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    Citation Envoy� par Loulou24
    Une solution est en g�n�ral d'utiliser la version dynamique de la biblioth�que standard, ainsi plus de probl�me.
    Pour la STL dynamique / statique �a change pas grand chose. M�me si c'est la m�me lib standard, si 2 impl�mentations de std::string se confrontent (COW vs normal par ex) boom (faudrait tester tiens, un prog VC++ 7.1 par exemple avec une dll qui utilise STLPORT sur le m�me compilo).
    M�me appeler c_str() je ne suis pas s�r que �a marche � 100%. Je pense m�me que �a change pas grand chose.
    On peut exporter certaines parties de la STL. J'�tais rest� sur l'id�e d'une 3� dll � part qui ne compile et exporte que la STL, les 2 autres l'utilisent. Mais beaucoup de bidouille pour une solution dont je ne sais pas si �a marcherait avec autre chose que VC++, j'ai laiss� tomber.

  5. #5
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    On peut exporter certaines parties de la STL. J'�tais rest� sur l'id�e d'une 3� dll � part qui ne compile et exporte que la STL
    C'est �a que je voulais dire en parlant de lier avec la biblioth�que standard dynamique. Ca va produire exactement ce que tu dis, � savoir une troisi�me DLL qui n'exporte que la STL.

    Sinon oui, si on utilise pas la m�me version de la STL dans les 2 modules, boom dans tous les cas.

  6. #6
    tut
    tut est d�connect�
    Membre �clair�
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Par d�faut
    j'utilise Visual C++ 6.0, dans le m�me Workspace j'ai plusieurs projets, dont la fameuse DLL. Donc, m�me compilo, m�me version de STL.
    Je vais essayer de bricoler avec un buffer de char local.

  7. #7
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Je vais essayer de bricoler avec un buffer de char local
    Si tu lies avec la RTL tu n'auras aucun souci .

  8. #8
    tut
    tut est d�connect�
    Membre �clair�
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Par d�faut
    la RTL ? rien � voir avec Fabrice et Jean Roucas, je pr�sume,
    tu veux pas �clairer ma lanterne � la lueur de ton exp�rience ?

  9. #9
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    RunTime Librairy : biblioth�que dynamique => version dll de la lib standard (msvcrt.dll...).

  10. #10
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    la RTL ? rien � voir avec Fabrice et Jean Roucas, je pr�sume
    Non en effet . En liant avec la biblioth�que standard dynamique, tu vas utiliser la DLL pr�vue � cet effet (MSCVCRT.DLL avec VC++) plutot que le .lib qui serait inclu � ton binaire apr�s compilation. Ainsi tout ce qui sera allocation / d�sallocation sur des �l�ments de la biblioth�que standard seront bien tous effectu�s dans la m�me DLL.

    Dans les options de VC6, c'est "Setting" -> "C/C++"' -> "Code generation" -> "Use run-time library" -> "(Debug) Multithreaded DLL".

  11. #11
    tut
    tut est d�connect�
    Membre �clair�
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Par d�faut
    Merci Messieurs.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [VC6 et VC8] Error C2679 operator!= std::string
    Par 3uclide dans le forum SL & STL
    R�ponses: 11
    Dernier message: 09/06/2009, 18h54
  2. Probl�me std::string et operator <<
    Par jomeo dans le forum SL & STL
    R�ponses: 2
    Dernier message: 21/02/2007, 11h36
  3. R�ponses: 1
    Dernier message: 20/02/2007, 17h17
  4. cannot convert 'std::string' to 'System::String ^'
    Par broadhead dans le forum MFC
    R�ponses: 1
    Dernier message: 14/06/2005, 11h37
  5. [Débutant][String] Opérations sur une chaîne
    Par gandalf_le_blanc dans le forum G�n�ral Java
    R�ponses: 8
    Dernier message: 08/06/2004, 11h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo