🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: japan.comp.lang.visual-c++
Article #6

Re: $B%3%s%9%H%i%/%?Fb$rHr$1$k$Y$-=hM}(B

#6
From: okahisa
Date: Tue, 09 May 2000 00:00
83 lines
3319 bytes
$B2,5W$G$9!#(B

<8f5cue$rjs$1@newsgw8.odn.ne.jp>$B$N5-;v$K$*$$$F(B
kiya@asahi.email.ne.jp$B$5$s$O=q$-$^$7$?!#(B

>> $B!!4pK\E*$K$O!"(Bnew $B$7$J$$$h$&$K$9$l$PLdBj$J$5$=$&$G$9!#$I$&$7(B
>> $B$F$b(B new $B$9$k$H$-$O!"%m!<%+%kJQ?t$H$7$F:n@.$7$?%*%V%8%'%/%H(B
>> $B$N%a%s%P!<$K%]%$%s%?!<$r$b$?$;$F%G%9%H%i%/%?!<$GGK4~$7$F$^$9!#(B
($BN,(B)
>> $B!!L@<(E*$K%3%s%9%H%i%/%?!<$r8F$VI,MW$,$"$k>lLL$K$ONI$/=P2q$$(B
>> $B$^$9!#0lHVB?$$$N$O!"(BCArray $B$J$I$N%F%s%W%l!<%H$r;H$&>l9g$G$9!#(B
>> 
>> $B!!$"$H$O!"%/%i%9%$%s%9%?%s%9$NG[Ns$r!"%m!<%+%k%R!<%W>e$K<h$k(B
>> $B>l9g$J$I$O!"%a%b%j!<3NJ]$O!"(BAPI $B$K$J$j$^$9$N$G!"%3%s%9%H%i%/(B
>> $B%?!<$rL@<(E*$K8F$VI,MW$,$"$j$^$9!#(B
>> 
>>     void* pvoBuff = ::HeapAlloc( hHeap, 0, sizeof(CHoge)*ITEMS );
>>     CHoge* p = (CHoge*)pvoBuff;
>>     for ( int i = 0 ; i < ITEMS ; ++ i )
>>     {
>>         p->CHoge::CHoge( );
>>         ++ p;
>>     }


  $B$d$C$Q$j!"G[NsHG(B auto_ptr $B$,M_$7$$$G$9$M!#(B

  $B%G%U%)%k%H$N(B new $B0J30$+$i$N%a%b%j$r;H$C$F%*%V%8%'%/%H$r9=C[$9$k(B
$B$K$O(B placement new $B$,;H$($k$H;W$$$^$9!#(B

    #include <iostream>
    #include <vector>
    #include <new>
    #include <cstdlib>
    using namespace std;

    template <class T> class hitman
    {
    public:
        hitman(const T& t) : target(&t) {}
        ~hitman() { target->~T(); }
    private:
        const T* target;
    };

    class CHoge
    {
    public:
        CHoge() { cerr << "CHoge: Ogyaaa!!" << endl; }
        ~CHoge() { cerr << "CHoge: "Ugyaaa!!" << endl; }
    };

    int main()
    {
        const int N = 4;
        void* p = malloc(N * sizeof(CHoge));
        if (p) {
            CHoge* vips = new(p) CHoge[N];
            vector< hitman<CHoge> > request(vips, vips + N);
            // peaceful time ...
        }
        return 0;
    }

$B$R$g$C$H$7$?$i!"(B(STL $B$N(B)$B<BAu$K0MB8$7$F$$$k$+$b$7$l$^$;$s!#(B

  $B$3$l0J30$K$b!"0z?t$J$7$N%3%s%9%H%i%/%?$,$[$H$s$I2?$b$7$J$$$+!"(B
$BESCf$G%G%9%H%i%/%?$r8F$s$G$bBg>fIW$J%*%V%8%'%/%H$NG[Ns$N:F=i4|(B
$B2=$O(B

    for (int i = 0; i < N; i++) {
        vips[i].~CHoge(); // $B>l9g$K$h$C$F$O>JN,2D$+$b(B
        new(&vips[i]) CHoge(i);
    }

$B$H$$$&$U$&$K$G$-$k$+$b$7$l$^$;$s!#(B

// $B<+J,$G(B CHoge $B$r=q$/$H$-$O!"%H%j%C%-!<$J$3$H$r$9$k$h$j=i4|2=(B
// $BMQ%a%s%P4X?t$r:n$k$N$,$h$$$H;W$$$^$9!#BeF~1i;;;R$O0l;~%*%V(B
// $B%8%'%/%H$r:n$C$F$O2u$9$N$G%$%d$+$b(B...

--
Email: okahisa@cs.ehime-u.ac.jp
Technical Details
Message-ID: <8f95bs$vk9$1@csgw2.cs.ehime-u.ac.jp>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <8evptd$4m2$2@newsgw8.odn.ne.jp> <8f0qal$jrh$1@nwms2.odn.ne.jp> <8f5cue$rjs$1@newsgw8.odn.ne.jp>

Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS
X-Google-Thread: f71b3,d8108d20cf4aa80b
X-Google-Attributes: gidf71b3,public
X-Google-Thread: 10a2c7,d8108d20cf4aa80b
X-Google-Attributes: gid10a2c7,public
From: okahisa@cs.ehime-u.ac.jp
Subject: Re: $B%3%s%9%H%i%/%?Fb$rHr$1$k$Y$-=hM}(B
Date: 2000/05/09
Message-ID: <8f95bs$vk9$1@csgw2.cs.ehime-u.ac.jp>
X-Deja-AN: 621125166
References: <8evptd$4m2$2@newsgw8.odn.ne.jp> <8f0qal$jrh$1@nwms2.odn.ne.jp> <8f5cue$rjs$1@newsgw8.odn.ne.jp>
X-Complaints-To: usenet@cs.ehime-u.ac.jp
X-Trace: csgw2.cs.ehime-u.ac.jp 957880508 32393 133.71.90.66 (9 May 2000 13:55:08 GMT)
Organization: Dept.of Computer Science,Ehime University,Japan
NNTP-Posting-Date: 9 May 2000 13:55:08 GMT
Newsgroups: japan.comp.lang.visual-c++,fj.comp.lang.c++