• Advertisement
Sign in to follow this  

array of void pointers (C++)

This topic is 4461 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

ok I just spent an hour search google and havnt found anything on this. I have an array of void pointers as a field in a class. class A { private: void* data[5]; } first, is there any way to make it so that that 5 can be any number that is given to the constructor? second, how do you allocate memory for this thing?? I tried data = new void* [5]; which didnt work. I tried putting parenthesis around the void* and got an error...

Share this post


Link to post
Share on other sites
Advertisement

class A
{
A()
{
data = 0;
}

A( int size )
{
data = new void*[ size ];
}

~A()
{
delete [] data;
}

private:
void** data;
};

Share this post


Link to post
Share on other sites
Just to add to the above post you'll want to declare data as
"void** data;" and (more than likely) declare your constructors as public.

Share this post


Link to post
Share on other sites
It is extremely, extremely rare that you need to use a void* in a C++ program. I suggest you elaborate on what you want to do, and then we can tell you the right way to do it.

However, you've clearly got issues with dynamic memory arrays. In general, this isn't so bad, so I'll help out there. Just, I'll substitute int for void*.

To create a variable length array of ints, you first declare a pointer to an int.

int* array;

Then, you actually create the array via a call to new[]

array = new int[5]; //5 can be anything, including a variable

Now, you can use array however you want.

cout << array[3] << endl;

When you are done, you get rid of the array. You created it with acall to new[], so you erase it with a call to delete[]

delete[] array;


Now, lets say you want to create an array of pointers to int. Straight forward: your type is simply 'int*' rather than 'int'.

int** array;
array = new int*[5];
cout << array[3] << endl; //this prints the address in array[3]
//to print the value you use *(array[3]) just like you would any other pointer
delete[] array;


Now, having covered all that, the right way to do this is to use std::vector, but that's a lesson for another day.

CM

Share this post


Link to post
Share on other sites
Array sizes must be known at compile time, which is the previous two posters show you how to do it with a pointer to an array of pointers.

However, it would be easier and safer if you used something like std::vector or boost::array. Also, you should consider boost::any instead of void pointers as it is much less hassle and is much safer.

Share this post


Link to post
Share on other sites
Quote:
Original post by michael879
ok I just spent an hour search google and havnt found anything on this. I have an array of void pointers as a field in a class.
class A
{
private:
void* data[5];
}
first, is there any way to make it so that that 5 can be any number that is given to the constructor? second, how do you allocate memory for this thing?? I tried
data = new void* [5];
which didnt work. I tried putting parenthesis around the void* and got an error...


#include <vector>

class A
{
private:
std::vector< void * > data;
public:
void foo() {
data.resize( 5 );
//data[0] = ...
//data[4] = ...
//data[5] = ERROR - 5 elements = 0, 1, 2, 3, 4.
data.resize( 6 );
//data[5] = OK now
}
};





You (probably) don't want to use (void *).

Share this post


Link to post
Share on other sites
Quote:
Original post by d_emmanuel and (more than likely) declare your constructors as public.


Bugger, theres always something I miss out, and theres always some smug bastard who points it out :P :)

Share this post


Link to post
Share on other sites
Quote:
Original post by Bezben
Bugger, theres always something I miss out, and theres always some smug bastard who points it out :P :)

This is why I try and use structs for code examples [grin]

CM

Share this post


Link to post
Share on other sites
Quote:
Original post by Conner McCloud
Quote:
Original post by Bezben
Bugger, theres always something I miss out, and theres always some smug bastard who points it out :P :)

This is why I try and use structs for code examples [grin]

It's things like that which make me want a Firefox IDE plugin ;-).

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement