|
Boost : |
From: Philippe A. Bouchard (philippeb_at_[hidden])
Date: 2002-07-17 12:20:35
"Ed Brey" <brey_at_[hidden]> wrote in message
news:ah3q5c$or7$1_at_main.gmane.org...
> "Philippe A. Bouchard" <philippeb_at_[hidden]> wrote in message
news:ah3b6t$nah$1_at_main.gmane.org...
[...]
> > Here is a draft version of what could remove copy constructors usages.
It
> > would require proper initialization from the user in this example.
Besides
> > the implicit reinterpret_cast<> in the constructor which shouldn't be
there
> > IMO, any thoughts?
>
> Looking at the code, I don't follow how it is supposed to work. For
example, consider the code:
>
> squad_ptr<char> p(new char);
>
> In this case, squad_ptr puts its use count in memory immediately following
what was allocated for the character. This amounts to a buffer overrun,
blowing past the block that the heap manager gave your program.
This was a too much optimized example and turned corrupted, but element_type
could also be constructed then retouched with new (element_type().m_buffer)
value_type(...) in 2 statements instead of one.
Here is another clean example using struct initiliazers which uses 1
statement and is more solid at construction time.
Philippe A. Bouchard
begin 666 squad_ptr.h
M+RH*(" @5&AI<R!F:6QE(&ES('!A<G0@;V8@=&AE($9$22!L:6)R87)I97,*
M(" @0V]P>7)I9VAT("AC*2 R,# R(%!H:6QI<'!E($$N($)O=6-H87)D(#QP
M:&EL:7!P94!F;W)N=7_at_N8V]M/@H*(" @5&AI<R!L:6)R87)Y(&ES(&9R964@
M<V]F='=A<F4[('EO=2!C86X@<F5D:7-T<FEB=71E(&ET(&%N9"]O<@H@("!M
M;V1I9GD@:70@=6YD97(@=&AE('1E<FUS(&]F('1H92!'3E4_at_3&EB<F%R>2!'
M96YE<F%L(%!U8FQI8PH@("!,:6-E;G-E('9E<G-I;VX@,B!A<R!P=6)L:7-H
M960_at_8GD@=&AE($9R964_at_4V]F='=A<F4_at_1F]U;F1A=&EO;BX*"B @(%1H:7,@
M;&EB<F%R>2!I<R!D:7-T<FEB=71E9"!I;B!T:&4@:&]P92!T:&%T(&ET('=I
M;&P_at_8F4@=7-E9G5L+ H@("!B=70_at_5TE42$]55"!!3ED_at_5T%24D%.5%D[('=I
M=&AO=70_at_979E;B!T:&4@:6UP;&EE9"!W87)R86YT>2!O9_at_H@("!-15)#2$%.
M5$%"24Q)5%D@;W(@1DE43D534R!&3U(@02!005)424-53$%2(%!54E!/4T4N
M("!3964@=&AE($=.50H@("!,:6)R87)Y($=E;F5R86P_at_4'5B;&EC($QI8V5N
M<V4_at_9F]R(&UO<F4_at_9&5T86EL<RX*"B @(%EO=2!S:&]U;&0@:&%V92!R96-E
M:79E9"!A(&-O<'D@;V8@=&AE($=.52!,:6)R87)Y($=E;F5R86P_at_4'5B;&EC
M($QI8V5N<V4*(" @86QO;F<@=VET:"!T:&ES(&QI8G)A<GD[('-E92!T:&4@
M9FEL92!#3U!924Y'+DQ)0BX@($EF(&YO="P@=W)I=&4@=&\*(" @=&AE($9R
M964_at_4V]F='=A<F4_at_1F]U;F1A=&EO;BP_at_26YC+BP_at_-3D@5&5M<&QE(%!L86-E
M("T_at_4W5I=&4@,S,P+ H@("!";W-T;VXL($U!(# R,3$Q+3$S,#<L(%5302X*
M*B\*"@HC:69N9&5F(%-154%$7U!44E]("B-D969I;F4_at_4U%5041?4%127T@*
M"@HC:6YC;'5D92 \;F5W/@H*"FYA;65S<&%C92!F9&D*>PH*=&5M<&QA=&4@
M/&-L87-S(%]4<#X*"7-T<G5C="!S<75A9%]P='(*"7L*"0ET>7!E9&5F(%]4
M<"!V86QU95]T>7!E.PH*"0ES=')U8W0_at_96QE;65N=%]T>7!E"@D)>PH)"0ES
M=')U8W0_at_8V]U;G1E<E]T>7!E"@D)"7L*"0D)"69R:65N9"!C;&%S<R!S<75A
M9%]P='(["@H)"0D)8V]U;G1E<E]T>7!E*"D_at_.B!M7W9A;'5E*#$I"@D)"0E[
M"@D)"0E]"@H)"0EP<FEV871E._at_H)"0D):6YT(&U?=F%L=64["@D)"7T["@H)
M"0EV86QU95]T>7!E(&U?=F%L=64["@D)"6-O=6YT97)?='EP92!M7V-O=6YT
M.PH)"7T["@H)"7-Q=6%D7W!T<BAE;&5M96YT7W1Y<&4@*B!A7W @/2 P*2 Z
M(&U?<'1R*&%?<"D*"0E["@D)?0H*"0ES<75A9%]P='(H<W%U861?<'1R(&-O
M;G-T("8_at_85]P*2 Z(&U?<'1R*&%?<"YS:&%R92_at_I*0H)"7L*"0E]"@H)"71E
M;7!L871E(#QC;&%S<R!?5' Q/@H)"0ES<75A9%]P='(H<W%U861?<'1R/%]4
M<#$^(&-O;G-T("8_at_85]P*2 Z(&U?<'1R*&%?<"YS:&%R92_at_I*0H)"0E["@D)
M"7T*"@D)<W%U861?<'1R("8@;W!E<F%T;W(@/2 H<W%U861?<'1R(&-O;G-T
M("8_at_85]P*0H)"7L*"0D):68@*"8_at_85]P("$]('1H:7,I"@D)"7L*"0D)"7)E
M<V5T*&%?<"YS:&%R92_at_I*3L*"0D)?0H)"0ER971U<FX@*B!T:&ES.PH)"7T*
M"@D)=&5M<&QA=&4@/&-L87-S(%]4<#$^"@D)"7-Q=6%D7W!T<B F(&]P97)A
M=&]R(#T@*'-Q=6%D7W!T<CQ?5' Q/B!C;VYS=" F(&%?<"D*"0D)>PH)"0D)
M:68@*&%?<"YG970H*2 A/2!T:&ES+3YG970H*2D*"0D)"7L*"0D)"0ER97-E
M="AA7W N<VAA<F4H*2D["@D)"0E]"@D)"0ER971U<FX@*B!T:&ES.PH)"0E]
M"@H)"7YS<75A9%]P='(H*0H)"7L*"0D):68@*&U?<'1R("8F("$@+2T@;5]P
M='(M/FU?8V]U;G0N;5]V86QU92D*"0D)>PH)"0D)9&5L971E(&U?<'1R.PH)
M"0E]"@D)?0H*"0EV86QU95]T>7!E("8@;W!E<F%T;W(@*B H*2!C;VYS= H)
M"7L*"0D)<F5T=7)N(&U?<'1R+3YM7W9A;'5E.PH)"7T*"@D)=F%L=65?='EP
M92 J(&]P97)A=&]R("T^("@I(&-O;G-T"@D)>PH)"0ER971U<FX@)B!M7W!T
M<BT^;5]V86QU93L*"0E]"@H)"79A;'5E7W1Y<&4@*B!G970H*2!C;VYS= H)
M"7L*"0D)<F5T=7)N("8@;5]P='(M/FU?=F%L=64["@D)?0H*"0EE;&5M96YT
M7W1Y<&4@*B!S:&%R92_at_I(&-O;G-T"@D)>PH)"0EI9B H;5]P='(I"@D)"7L*
M"0D)"2LK(&U?<'1R+3YM7V-O=6YT+FU?=F%L=64["@D)"7T*"0D)<F5T=7)N
M(&U?<'1R.PH)"7T*"@D)=F]I9"!R97-E="AE;&5M96YT7W1Y<&4@*B!A7W @
M/2 P*0H)"7L*"0D):68@*&U?<'1R("8F("$@+2T@;5]P='(M/FU?8V]U;G0N
M;5]V86QU92D*"0D)>PH)"0D)9&5L971E(&U?<'1R.PH)"0E]"@D)"6U?<'1R
M(#T_at_85]P.PH)"7T*"@EP<FEV871E._at_H)"65L96UE;G1?='EP92 J(&U?<'1R
2.PH)?3L*"GT*"@HC96YD:68*
`
end
begin 666 ice.cpp
M(VEN8VQU9&4@/&EO<W1R96%M/@HC:6YC;'5D92 B<W%U861?<'1R+F_at_B"@IU
M<VEN9R!N86UE<W!A8V4@<W1D.PIU<VEN9R!N86UE<W!A8V4_at_[hidden]*<W1R
M=6-T($$*>PH):6YT(&DL(&HL(&L["@H)02AI;G0_at_82P@:6YT(&(L(&EN="!C
M*2 Z(&DH82DL(&HH8BDL(&LH8RD*"7L*"0EC;W5T(#P\(%]?4%)%5%197T95
M3D-424].7U\@/#P_at_96YD;#L*"7T*"@E!*$$@8V]N<W0@)B!P*2 Z(&DH<"YI
M*2P@:BAP+FHI+"!K*' N:RD*"7L*"0EC;W5T(#P\(%]?4%)%5%197T953D-4
M24].7U\@/#P_at_96YD;#L*"7T*"@E^02_at_I"@E["@D)8V]U=" \/"!?7U!21514
M65]&54Y#5$E/3E]?(#P\(&5N9&P["@E]"GT["@H*:6YT(&UA:6XH*0I["@ES
M<75A9%]P='(\03X@<" ](&YE=R!S<75A9%]P='(\03XZ.F5L96UE;G1?='EP
M92_at_H<W%U861?<'1R/$$^.CIE;&5M96YT7W1Y<&4I('M!*#$L(#(L(#,I+"!S
M<75A9%]P='(\03XZ.F5L96UE;G1?='EP93HZ8V]U;G1E<E]T>7!E*"E]*3L*
F"@EC;W5T(#P\(' M/FL@/#P_at_96YD;#L*"@ER971U<FX@,#L*?0H`
`
end
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk