auto_ptr array
-
Sorry led mike, What is your reply to my original question? How to make an auto_ptr array and initialize it? regards, George
-
So this way he can read the answer once again, just to be sure he read it correctly ;P
Cédric Moonen Software developer
Charting control [v1.3] -
You mean your code will cause undefined behavior? CPallini? regards, George
George_George wrote:
You mean your code will cause undefined behavior? CPallini?
Well, MSDN says it and of course I cannot object to Microsoft. See here [^]. :)
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarkemodified on Tuesday, April 1, 2008 1:55 PM
-
Sorry led mike, What is your reply to my original question? How to make an auto_ptr array and initialize it? regards, George
George_George wrote:
What is your reply to my original question?
I have no answer for it. I don't understand the premise. auto_ptr should be used to implement exception safe locality and I don't understand the need to have an array of int pointers for local use. I would just put the ints on the stack and I would not use an array I would use a vector.
led mike
-
Hello everyone, I have tried to initialize an auto_ptr array, but failed. My C++ Programming Language book does not contain a sample about how to initialize an auto_ptr array. (not an auto_ptr pointing to an array, which is not legal) Any solutions?
#include <memory>
using namespace std;
int main()
{
auto_ptr<int[]> pi (new int[10]); // compile errorauto\_ptr<int> pi (new int\[10\]); // compile error return 0;
}
thanks in advance, George
As you have already discovered auto_ptr is not designed to work as an array of pointers. There are multiple solutions to your problem and they are described in the below links. http://www.codeproject.com/KB/cpp/COAP.aspx[^] http://www.gotw.ca/gotw/042.htm[^] If you are just interested finding out how auto_ptr can be used with an array then above links are suffice. but in real use, you might want to take a look at the boost smart pointer library. you can also use the shared_ptr as it is designed to work with STL containers. Ankita
-
George_George wrote:
You mean your code will cause undefined behavior? CPallini?
Well, MSDN says it and of course I cannot object to Microsoft. See here [^]. :)
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarkemodified on Tuesday, April 1, 2008 1:55 PM
Sure, CPallini! About my original question, your option is we can not define an auto_ptr array and do initialization at the same time? regards, George
-
George_George wrote:
What is your reply to my original question?
I have no answer for it. I don't understand the premise. auto_ptr should be used to implement exception safe locality and I don't understand the need to have an array of int pointers for local use. I would just put the ints on the stack and I would not use an array I would use a vector.
led mike
Hi led mike, int is just used for demo purpose. You can use user defined data types, like class Foo. How to define an array of auto_ptr and initialization at the same time? regards, George
-
So this way he can read the answer once again, just to be sure he read it correctly ;P
Cédric Moonen Software developer
Charting control [v1.3]I agree, Cedric! Confirmation is good practice for the flat world. Since you are not sit next to me, or climb through the network cable. :-) regards, George
-
As you have already discovered auto_ptr is not designed to work as an array of pointers. There are multiple solutions to your problem and they are described in the below links. http://www.codeproject.com/KB/cpp/COAP.aspx[^] http://www.gotw.ca/gotw/042.htm[^] If you are just interested finding out how auto_ptr can be used with an array then above links are suffice. but in real use, you might want to take a look at the boost smart pointer library. you can also use the shared_ptr as it is designed to work with STL containers. Ankita
Hi Ankita, I have not made myself understood. My question is (say in another way), how to define an array of auto_ptr and initialization at the same time of definition? Any ideas? regards, George
-
Sure, CPallini! About my original question, your option is we can not define an auto_ptr array and do initialization at the same time? regards, George
Do you need an array of
auto_ptr
?If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke -
Do you need an array of
auto_ptr
?If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain ClarkeSure, CPallini. My requirement is, I need to have an array of pointers to class Goo, wrapped in class Foo as member variables. I want to make them auto_ptr array to make it exception safe. Do you think in this situation using auto_ptr array is a good idea? If you have better ideas, please feel free to let me know. :-) regards, George
-
Sure, CPallini. My requirement is, I need to have an array of pointers to class Goo, wrapped in class Foo as member variables. I want to make them auto_ptr array to make it exception safe. Do you think in this situation using auto_ptr array is a good idea? If you have better ideas, please feel free to let me know. :-) regards, George
You probably need something like the following: (Sample for a 3-items array)
auto_ptr<Foo> pi[3]={auto_ptr<Foo>(new Foo), auto_ptr<Foo>(new Foo), auto_ptr<Foo>(new Foo)};
:)
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke -
You probably need something like the following: (Sample for a 3-items array)
auto_ptr<Foo> pi[3]={auto_ptr<Foo>(new Foo), auto_ptr<Foo>(new Foo), auto_ptr<Foo>(new Foo)};
:)
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain ClarkeThanks CPallini, Do we have any ways to saving typing? regards, George
-
Thanks CPallini, Do we have any ways to saving typing? regards, George
Yes: employ someone and let he/she do the job for you. :-D
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke -
Yes: employ someone and let he/she do the job for you. :-D
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain ClarkeThanks CPallini, I believe it is a limitation for initialization approach for auto_ptr array. :-) regards, George
-
Thanks CPallini, I believe it is a limitation for initialization approach for auto_ptr array. :-) regards, George
That applies to all arrays initialization. Actually I dont know if there is a smarter way to do it. :)
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke -
That applies to all arrays initialization. Actually I dont know if there is a smarter way to do it. :)
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain ClarkeNo CPallini, For a normal array, we can declare/initialize in the simple way, saving type work. Right?
int array[20] = {100}; // initialize at the same time, assign all elements to 100
regards, George
-
No CPallini, For a normal array, we can declare/initialize in the simple way, saving type work. Right?
int array[20] = {100}; // initialize at the same time, assign all elements to 100
regards, George
No George. You are wrong. Your code
int array[20] = {100};
initializes only the first element of the array (please make a test). You can indeed apply the same syntax to an
auto_ptr
array. :)If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke -
No George. You are wrong. Your code
int array[20] = {100};
initializes only the first element of the array (please make a test). You can indeed apply the same syntax to an
auto_ptr
array. :)If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain ClarkeCool, CPallini! I have tried, you are correct! regards, George
-
Hi led mike, int is just used for demo purpose. You can use user defined data types, like class Foo. How to define an array of auto_ptr and initialization at the same time? regards, George
ankita patel has given you again the answer I gave you because it is the correct answer. Who cares how to do something that shouldn't be done. I recommend you stop wasting your time with all this deep diving into subtle mechanics of something just to find the answer. Start studying Design Patterns and learn about designing maintainable flexible software. When you run into a specific situation within a real context not an imagined one, then you take the time to go deep. Until then it's a giant waste of time trying to figure out something that you will never use. Don't you think?
led mike