|
Thanks.
This:
Rajkumar R wrote: the placement new
...
::new( &preAllocatedBuffer[0] ) myStruct;
was really interesting. Thank you. I appreciate it.
The first solution (Overloading new operator is nice either) but in this very special situation, I don't have myStruct (it's in fact LINEINITIALIZEEXPARAMS.)
By the way, great tips and techniques. Thanks for sharing.
Rajkumar R wrote: C++ is powerful
Absolutely I love it(my signature.) I wish it had built in support for multi threading.
// "In the end it's a little boy expressing himself." Yanni
while (I_am_alive) { cout<<"I love programming."; }
|
|
|
|
|
Hamed Mosavi wrote: I wish it had built in support for multi threading.
Multiple threads, Process Spawning, etc, OS concepts not language specific, OS can expose the API so that languages can pick it up. You have to be happy that C, C++ can directly access those API in our program, while some language has layers in between.
|
|
|
|
|
Rajkumar R wrote: OS concepts not language specific
Your right. What a bad mistake. It was a typo
// "In the end it's a little boy expressing himself." Yanni
while (I_am_alive) { cout<<"I love programming."; }
|
|
|
|
|
Thanks for the BYTE recall. Actually char and unsigned char work differently sometimes.
// "In the end it's a little boy expressing himself." Yanni
while (I_am_alive) { cout<<"I love programming."; }
|
|
|
|
|
Hello,
so far I create dynamic arrays like this
int elements=3;<br />
testclass* parray= new testclass [elements];
Id like to use the same approach on a the testclass with a private constructor without changing the source code of the testclass.
class testclass <br />
{<br />
public: static testclass* New();<br />
<br />
private: testclass(){};<br />
~testclass(){};<br />
};
-----------------------------------
testclass* testclass::New()
{
return new testclass;
};
I would be thankful for any advices..
best regards
tobse
|
|
|
|
|
So what's your question/problem?
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
The only solution I see is to work with an array of pointers to testclass objects instead of an array of testclass objects. Then you'll need to initialize each pointer by calling testclass::New. This is because an array needs to construct each of its elements, thus calling the constructor.
int elements=3;
testclass** parray= new testclass* [elements];
for (int i=0;i<elements; i++
{
parray[i] = testclass::New();
}
But it's a little bit ugly if you want my opinion
|
|
|
|
|
Hi,
great, it works ! Thank you.
Accessing the objects with parray[i]-> and deleting with delete [] parray works fine.
tobse
|
|
|
|
|
tobse wrote: and deleting with delete [] parray works fine
Yes, but it leaks memory. You have first to delete each element alone and then delete the array.
Remember that for each call to new, there should be a call to delete associated and for each call to new[], there should be a call to delete[] associated.
|
|
|
|
|
What is your doubt? Cannot you pass the array size to your static method New() ?
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
|
|
|
|
|
Hi,
to pass the array size I need to rewrite the new() method of the testclass, but rewriting the testclass is not possible
thanks tobse
|
|
|
|
|
Hi ,
As long as the constructor of my testclass is private compilation fails.
I can not construct an array of testclasses like this, because I try to access to a private member.
testclass* parray= new testclass [elements];
of course my example works when the constructor is public. Simply changing the constructor to public is not wished.
tobse
|
|
|
|
|
Use a std::vector instead.
Steve
|
|
|
|
|
Thanks, I tried this solution and so far I can not see disadvantages.
std::vector<testclass*>vectortestclass;<br />
<br />
testclass* t=0;<br />
int elements=5;<br />
for (int i=0;i<elements;++i)<br />
{<br />
t=testclass::New();<br />
vectortestclass.push_back(t);<br />
};
// Delete
for (int j=0;j<vectortestclass.size();++j)<br />
{
// The delete() function is a public member of testclass and runs the destructor.
vectortestclass[j]->Delete(); <br />
};<br />
vectortestclass.clear();
tobse
|
|
|
|
|
Why store pointers? Instead use std::vector<testclass> in which case you don't need to worry about deleting them.
Steve
|
|
|
|
|
Hi Steve,
sure this would be more comfortable but I dont see the the solution when the new operator is private . I would be glad for any advice if I am wrong.
Tobse
modified on Tuesday, March 4, 2008 7:05 AM
|
|
|
|
|
If the constructor is private the only possible caller is the class itself. Therefore only a public method of the class itself can call it. I don't see how you can use it in a vector as I've shown without altering the source.
Steve
|
|
|
|
|
I have to do an application for reading xml files with mfc vc++. I have to work with xerces. I have downloaded the binary distribution, but I don't know how to go on.
Can someone help me? what will be the next step ?
Sorry, I'm just a beginner!
Thanks!
|
|
|
|
|
Hallo
bisher habe ich dynamische Arrays auf diese Weise erzeugt
int elements=3;<br />
testclass* parray= new testclass [elements];
Ich möchte nun auf selbe Weise ein Array aus Objekte einer Klasse erzeugen in dem der Konstruktor als privat deklariert wurde ohne dabei den Quellcode der Klasse zu ändern.
class testclass <br />
{<br />
public: static testclass* New();<br />
<br />
private: testclass(){};<br />
~testclass(){};<br />
};
-----------------------------------
testclass* testclass::New()<br />
{<br />
return new testclass;<br />
};
Über Vorschläge wäre ich sehr dankbar,
Grüße tobse
|
|
|
|
|
This is an international forum so please post your question in english.
|
|
|
|
|
I am very sorry. how can I delete this thread ?
|
|
|
|
|
You can't, since it has been replied to already. You could have modified it in English, though, instead of creating a new post.
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Hi all,
how can i load a bitmap on "command button"(ActiveX)at run time
Thanks in advance
varun
modified on Thursday, February 28, 2008 8:49 AM
|
|
|
|
|
Hello all
I want to develop one application in which i want to know the list of all open window either it is minimized
Is this possible to know??
If possible then provide some code Snippets.
Thanks in advance.
Manish Patel.
B.E. - Information Technology.
|
|
|
|
|
manish.patel wrote: If possible then provide some code Snippets.
I refuse your demand!
I will however point you in the right direction... (OK, *a* direction). A B.E. in information technology can surely read documentation for the details.
You can use GetDesktopWindow to get the, um, desktop window.
Then either GetWindow with parameters GW_CHILD or GW_NEXT .
You can check with functions such as IsWindowVisible etc to filter out various states.
Alternately, you could use EnumChildWindows to do some of the work for you, at the expense of writing a second function.
Iain.
CPallini no longer cares if Iain Clarke appears or not. /sad
|
|
|
|