|
Boost Users : |
Subject: [Boost-users] Problem with list_of, make_shared and shared_ptr
From: alapex0310_at_[hidden]
Date: 2010-07-23 10:06:00
Hi,
I am using boost::list_of to pass a vector of pairs of string +
"unsigned char" to SomeClass (as it can be seen in the typedef below -
keys_t). This passes the whole vector to SomeClass which copies the
vector in the keys_ private variable. The problem is: the copy ctor now
copies the full vector in each SomeClass. To prevent this, as you can
see, I have defined another data member which is a reference to const
keys_t in my class and am initializing it in the member initialization
list of the constructor with the value of keys_ and having the copy
constructor copy just the reference of keys_ (rkeys_, that is - as you
can see in the member initialization list of the copy ctor) instead of
the full vector but the new SomeClass then holds an uninitialized vector
(keys_) which is ugly and I hate seeing it in the class. Can I possible
use Boost::make_shared with boost::list_of to return me a pointer to
whatever (vector of type keys_t) boost::list_of returns and store that
pointer instead in my class (e.g. keys_t typedef then reflects
boost::shared_ptr instead of a traditional pointer) instead of the full
vector. Specifying the arbitrary constants (apparently using
boost::list_of) right in the constructor call is a requirement. Is there
any way I can do it? Of course, I guess I could use boost::make_shared
to return me a boost::shared_ptr to keys_t but my code is not even
compiling and giving me errors in boost headers:
std::vector<std::pair<std::string,unsigned char>> keys_t;
class SomeClass
{
public:
SomeClass(std::string nameStr, keys_t keys) : keys_(keys),
rkeys_(keys_) {}
SomeClass(const SomeClass &koa) : rkeys_(koa.keys_) {}
private:
keys_t keys_;
const keys_t &rkeys_;
};
SomeClass *psc = new SomeClass( "MyClass",
list_of<pair<string,unsigned char>>
("one", 1)
("two", 2)
("three", 3)
("four", 4)
("five", 5)
("six", 6));
I read in boost::doc that I cannot pass shared_ptr directly as a
function argument because of temporary problems. So, I cannot pass a
shared_ptr to the constructor of SomeClass and that's the primary reason
I hope if you can help me use make_shared or something similar to get
the job done. The constraint is: I *must* pass the arbitrary number of
pairs of string-unsigned-char in my constructor and that's why I am
using list_of. Any way out?
-Al
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net