initialiser un objet alloué (WAS: realloc et templates)
13 réponses
Cyrille \cns\ Szymanski
Je cherchais à initialiser un objet ayant déjà été alloué.
Après une exploration de la STL Borland je suis tombé sur le code de
__construct
template <class T1, class T2>
inline void __construct (T1* p, const T2& value)
{
new (p) T1(value);
}
En utilisant directement ce code, on obtient une erreur indiquant que
'operator new(unsigned int,TestClass *)' n'existe pas.
int main()
{
TestClass *p = (TestClass*)malloc( sizeof(TestClass) );
__construct( p , 0 );
}
J'ai donc poussé plus loin la recherche dans la STL et je suis tombé sur
#define _RWSTDExportFunc(ReturnType) ReturnType
extern void _RWSTDExportFunc(*) operator new(size_t size, void* ptr);
Autrement dit
extern void * operator new(size_t size, void* ptr);
"Gabriel Dos Reis" a écrit dans le message de news:
Arnaud Meurgues writes:
| Christophe Lephay wrote: | | > D'un autre coté, au vu de ce que tu as expliqué dans ce même post (et que
| > j'ai supprimé), celà semble logique de placer dans des entêtes les | > fonctionnalités susceptibles de changer selon les desiderata du programmeur
| > :) | | Sauf que le new sans fioriture peut aussi être changé selon les | desiderata du programmeur et n'a pas besoin d'entête pour être | utilisé...
C'est plus subtile que ça : la déclaration de new sans fioriture ne peut pas changer. Ce qui peut changer c'est sa définition -- dans ce cas on dit que la fonction a été remplacée. Mais alors quelle serait l'utilité de l'entête, si de toute façon la définition n'est pas dans l'entête ?
Si j'étais de mauvaise foi, je dirais que c'est exactement ce que je voulais dire ;)
(mais comme je n'aime pas particulièrement être de mauvaise foi, bien que n'aimant pas plus avoir tord, je dirais que le mieux c'est que je fasse le canard au profil bas)...
Chris
"Gabriel Dos Reis" <gdr@integrable-solutions.net> a écrit dans le message de
news:m3oeyld5d5.fsf@uniton.integrable-solutions.net...
| Christophe Lephay wrote:
|
| > D'un autre coté, au vu de ce que tu as expliqué dans ce même post (et
que
| > j'ai supprimé), celà semble logique de placer dans des entêtes les
| > fonctionnalités susceptibles de changer selon les desiderata du
programmeur
| > :)
|
| Sauf que le new sans fioriture peut aussi être changé selon les
| desiderata du programmeur et n'a pas besoin d'entête pour être
| utilisé...
C'est plus subtile que ça : la déclaration de new sans fioriture ne
peut pas changer. Ce qui peut changer c'est sa définition -- dans ce
cas on dit que la fonction a été remplacée. Mais alors quelle serait
l'utilité de l'entête, si de toute façon la définition n'est pas
dans l'entête ?
Si j'étais de mauvaise foi, je dirais que c'est exactement ce que je voulais
dire ;)
(mais comme je n'aime pas particulièrement être de mauvaise foi, bien que
n'aimant pas plus avoir tord, je dirais que le mieux c'est que je fasse le
canard au profil bas)...
"Gabriel Dos Reis" a écrit dans le message de news:
Arnaud Meurgues writes:
| Christophe Lephay wrote: | | > D'un autre coté, au vu de ce que tu as expliqué dans ce même post (et que
| > j'ai supprimé), celà semble logique de placer dans des entêtes les | > fonctionnalités susceptibles de changer selon les desiderata du programmeur
| > :) | | Sauf que le new sans fioriture peut aussi être changé selon les | desiderata du programmeur et n'a pas besoin d'entête pour être | utilisé...
C'est plus subtile que ça : la déclaration de new sans fioriture ne peut pas changer. Ce qui peut changer c'est sa définition -- dans ce cas on dit que la fonction a été remplacée. Mais alors quelle serait l'utilité de l'entête, si de toute façon la définition n'est pas dans l'entête ?
Si j'étais de mauvaise foi, je dirais que c'est exactement ce que je voulais dire ;)
(mais comme je n'aime pas particulièrement être de mauvaise foi, bien que n'aimant pas plus avoir tord, je dirais que le mieux c'est que je fasse le canard au profil bas)...
Chris
Fabien LE LEZ
On 19 Aug 2003 15:51:59 GMT, "Cyrille "cns" Szymanski" wrote:
Je passe tant pour un hérétique que ça parce que rien que les trois lettres STL me font peur,
Oui.
et que en y pensant les mots "usine à gaz",
Moins qu'il n'y paraît : même si le code est gros, il est généralement efficace.
"effet secondaire"
Moins que toutes les implémentations parallèles que tu pourras faire (c'est d'ailleurs valable pour n'importe quel programmeur).
et "10 ans pour y être vraiment bon"
C'est largement exagéré, même s'il faut un peu de temps pour apprendre toutes les ficelles. Mais pour apprendre à utiliser std::vector<> de façon efficace, quelques minutes suffisent amplement.
me viennent à l'esprit ?
-- Tout sur fr.* (FAQ, etc.) : http://www.usenet-fr.net/fur/ et http://www.aminautes.org/forums/serveurs/tablefr.html Archives : http://groups.google.com/advanced_group_search http://www.usenet-fr.net/fur/usenet/repondre-sur-usenet.html
On 19 Aug 2003 15:51:59 GMT, "Cyrille "cns" Szymanski"
<cns2@cns.invalid> wrote:
Je passe tant pour un hérétique que ça parce que rien que les trois lettres
STL me font peur,
Oui.
et que en y pensant les mots "usine à gaz",
Moins qu'il n'y paraît : même si le code est gros, il est généralement
efficace.
"effet secondaire"
Moins que toutes les implémentations parallèles que tu pourras faire
(c'est d'ailleurs valable pour n'importe quel programmeur).
et "10 ans pour y être vraiment bon"
C'est largement exagéré, même s'il faut un peu de temps pour apprendre
toutes les ficelles.
Mais pour apprendre à utiliser std::vector<> de façon efficace,
quelques minutes suffisent amplement.
me viennent à l'esprit ?
--
Tout sur fr.* (FAQ, etc.) : http://www.usenet-fr.net/fur/
et http://www.aminautes.org/forums/serveurs/tablefr.html
Archives : http://groups.google.com/advanced_group_search
http://www.usenet-fr.net/fur/usenet/repondre-sur-usenet.html
On 19 Aug 2003 15:51:59 GMT, "Cyrille "cns" Szymanski" wrote:
Je passe tant pour un hérétique que ça parce que rien que les trois lettres STL me font peur,
Oui.
et que en y pensant les mots "usine à gaz",
Moins qu'il n'y paraît : même si le code est gros, il est généralement efficace.
"effet secondaire"
Moins que toutes les implémentations parallèles que tu pourras faire (c'est d'ailleurs valable pour n'importe quel programmeur).
et "10 ans pour y être vraiment bon"
C'est largement exagéré, même s'il faut un peu de temps pour apprendre toutes les ficelles. Mais pour apprendre à utiliser std::vector<> de façon efficace, quelques minutes suffisent amplement.
me viennent à l'esprit ?
-- Tout sur fr.* (FAQ, etc.) : http://www.usenet-fr.net/fur/ et http://www.aminautes.org/forums/serveurs/tablefr.html Archives : http://groups.google.com/advanced_group_search http://www.usenet-fr.net/fur/usenet/repondre-sur-usenet.html
drkm
Gabriel Dos Reis writes:
et historiquement aussi, "new" voulait dire autre chose.