Re: Vectors of references
Larry Brunelle wrote:
......
With code like this,
struct testStruct
{
int foobis;
};
this works fine:
testStruct& ref1 = ts;
testStruct& ref2 = ref1;
That is, I can copy a reference.
Howsomever, I can't put it into a vector
(which, of course, would involve making
a copy).
In fact, I can't even define a vector of
reference.
The problems that I can see with a vector of references are:
1. For a 'resize' method you need a default constructor for a reference
type, which doesn't exist.
2. v[i] returns a reference to the basic type. I don't know what is the
meaning of T&& in C++. Even if it exists, I would avoid using it!-)
3. There is a serious problem when you assign values to such a vector,
e.g. if you write
v[i] = obj;
the variable 'obj' has to be a global variable of type 'T', or a
variable of type 'T&', otherwise you might obtain an undefined value in
a vector when obj is destroyed..
Michael
The following code
vector<testStruct& v1;
stimulates the compiler to emit errors like
these (only a lot more of them). Changing the
contained type to const testStruct& changes
nothing, but of course I can create and use a
vector of pointer.
Is this my stupidity, and/or is it fodder
for a future Item?
/usr/include/c++/3.2.3/bits/stl_vector.h: In instantiation of
`std::_Vector_alloc_base<testStruct&, std::allocator<testStruct&, true':
test.C:33: instantiated from `std::_Vector_base<testStruct&,
std::allocator<testStruct& '
test.C:33: instantiated from `std::vector<testStruct&,
std::allocator<testStruct& '
test.C:33: instantiated from here
/usr/include/c++/3.2.3/bits/stl_vector.h:115: forming pointer to reference type
`testStruct&'
/usr/include/c++/3.2.3/bits/stl_vector.h:116: forming pointer to reference type
`testStruct&'
/usr/include/c++/3.2.3/bits/stl_vector.h:117: forming pointer to reference type
`testStruct&'
/usr/include/c++/3.2.3/bits/stl_vector.h:121: forming pointer to reference type
`testStruct&'
/usr/include/c++/3.2.3/bits/stl_vector.h:123: forming pointer to reference type
`testStruct&'
/usr/include/c++/3.2.3/bits/stl_vector.h: In instantiation of
`std::vector<testStruct&, std::allocator<testStruct& ':
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]