20 Mar
2007
20 Mar
'07
11:10 p.m.
Xu, Peng wrote:
greetings,
my test code is as follows: " int k = 128; std::vector<boost::shared_ptr<int> > v(k); for(unsigned int i = 0; i < k; ++i) { v[i].reset(&k); // v[i].reset(new int(0)); }
v[i].reset(&k) assumes that &k was allocated via a call to new. Since it wasn't, you will eventually get a segfault when the shared pointer at v[i] attempts to delete &k. To get around this, use the version of reset() that takes a pointer and a deleter object. struct null_deleter { void operator()(const void *) {} // Do-nothing operator() }; int k = 128; std::vector<boost::shared_ptr<int> > v(k); for (unsigned int i = 0; i < k; ++i) { v[i].reset(&k, null_deleter()); } Joe Gottman