Re: prevent assignement from a vector
mosfet wrote:
Hi,
In one my class I would like to give access to one of my buffer so I
have declared something like this :
vector<char>& RespData = pWebResp->get_RawBuffer();
I guess that you have a member of vector<char> in pWebResp.
assume that pWebResp is of WebResp* type;
then you can let /WebResp/ non-copyable by declare /operator=/ and
copy-ctor private members of /WebResp/.
The problem is caller can also write this :
vector<char> RespData = pWebResp->get_RawBuffer();
Oh, then you have to use a wrapper for std::vector<char>
class NonCopyVector
: public std::vector<char>
{
private:
NonCopyVector(NonCopyVector const&);
NonCopyVector& operator= (NonCopyVector const&);
};
I guess someone will say, don't inherit from vector.
OK,
but why bot just use
vector<char>* pResp = pWebResp->get_RawBuffer();
// return pointer then reference
If you still likes return by reference
OK,
class VectorRef
{
public:
typedef std::vector<char>& ref_type;
VectorRef(ref_type ref) : ref_(ref) {}
operator ref_type() { return ref_; }
private:
ref_type ref_;
};
then
VectorRef dataRef = pWebResp->get_RawBuffer();
but you have to explicit cast to std::vector<char>& type before calling
its member functions
(static_cast<std::vector<char>&>(dataRef)).begin();
/////////////////////
IMO, change to return pointer is better.
and in this case will it copy my buffer into RespData ?
If yes how can I prevent this behavior ?