|
George_George wrote: If we met with bad_alloc, do we need to use delete or delete[] to free the memory in exception handler block?
You don't need to free unallocated memory, qutoing MSDN
http://msdn2.microsoft.com/en-us/library/6512dwes(vs.80).aspx[^]:
The class describes an exception thrown to indicate that an allocation request did not succeed.
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.
[my articles]
|
|
|
|
|
Thanks CPallini,
But from the link, I can not find it is explicitly mentioned we do not need to delete or delete[] if bad_alloc occurs.
regards,
George
|
|
|
|
|
George: "No memory, no party!"
If bad_alloc is thrown then memory is NOT ALLOCATED then you have not to call neither delete nor delete [] .
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.
[my articles]
|
|
|
|
|
Thanks CPallini,
My question is answered.
regards,
George
|
|
|
|
|
my complie tool is visual studio6.0.
but some source is made from turbo c.
so i can't complie on the visual studio.
"textattr" <-- that function.
so there are any same function with "textattr" on the visual studio library?
firstly, i am sorry, i am from korea.
and i am not good in wriitting english so please understand~
Thank you everyone~
|
|
|
|
|
AFAIK there isn't a similar function for console programs. On the other hand you have a great control on text attributes of windowed applications, but you have to deal with several issues (event-driven apps, graphical output).
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.
[my articles]
|
|
|
|
|
I have created object of tree control as m_TreeCtrl. I want to refresh the tree control on refresh button click to reflect the new changes after adding or deleting the node. I could not find the API for that.
Please help me to find the API for refreshing the tree control.
|
|
|
|
|
Unless you explicitely block, the tree control refreshes itself after inserting/modifying/removing items.
|
|
|
|
|
Hi All,
I have to handle text files of larger sizes ranges from 10GB and more which are exported from some application softwares. The text files contains the required information scattered throughout the file. I need to gather all those information in a particular format to do further analysis. Say for example, if the input file contains as following:
#10 // time stamp 10
0!
1(
1=
#15 // time stamp 15
1!
0:
I have to gather the information as,
! 10 0 15 1
( 10 1
= 10 1
: 10 0
So please suggest me how to store the above gathered information either as a vector, class arrays, or anything else like database e.t.c., The information surely occupies size larger than 10GB. And i have to access the gathered information for further progress.
With Regards,
Sangeetha.
|
|
|
|
|
Hi...
I am working with a Dialog based application. In which i am trying to add features like ptint, help etc. we can achieve this by making CFormView is the base class before making a SDI application. But I dont want the tittle bar & menu. Anybody suggest way of doing this.....
Thanks in advance
sairam
|
|
|
|
|
Hello everyone,
Through my testing and study of RAII (Resource Acquisition Is Initialization) pattern, I think it can solve resource release issue in the following two situations,
1. Local function object (on stack);
2. Object (either on heap or stack) pointer by auto_ptr;
But it has the limitation that the object pointed by a normal pointer and allocated on heap (using new or new[]) can not be automatically released, either the function returns normally or during exception stack unwinding. Is that correct?
thanks in advance,
George
|
|
|
|
|
You can. You could write your own classes or - as I'd recommend - use boost smart pointers.
basically, there is:
scoped_ptr<T> pT(new T) - freed when pT leaves scope
scoped_array<T> paT(new T[77]) - freed when paT leaves scope
shared_ptr<T> pT(new T) - can be assigned to another shared_ptr and deletes T when the last reference goes out of scope
shared_array<T> pT(new T[77]) - as above, but uses delete[]
With shared_ptr you can use a custom deleter, which allows to wrap arbitrary ressources, e.g. malloc'ed or GlobalAlloc'ed pointers.
I've written two articles that give a bit more detail:
Smart Pointers to boost your code[^] for a thorough introduction
shared_ptr wraps resource handles[^] which demonstrates a slightly quirky but efficient way to use the custom deleter.
|
|
|
|
|
Thanks peterchen,
shared_ptr is good idea. But I think it is not implemented in Visual Studio, right?
BTW: any comments/options about our original question (put your good ideas about shared_ptr aside for a while)? Is my understanding correct?
regards,
George
|
|
|
|
|
George_George wrote: But I think it is not implemented in Visual Studio, right?
Yes, it's part of the boost libraries - however, it's one part that is likely to make it into the next C++ Standard (C++ 0x).
George_George wrote: any comments/options about our original question (put your good ideas about shared_ptr aside for a while)? Is my understanding correct?
I thought I answered that But ok, in more detail:
Many resources like heap allocated pointers are not deleted automatically when leaving scope. However, they can be when using the right tools.
You could introduce a helepr class like this:
template <typename t="">
class ScopePtr
{
T * m_pT;
public:
ScopePtr(T * pT) : m_pT(pT) {}
~ScopePtr() { delete m_pT; }
T * ptr() { return m_pT; }
}
</typename>
and use it like this:
void Foo()
{
ScopePtr<bar> bar(new Bar());
bar.ptr()->Run();
...
}
</bar>
If you add some operator overloads and a lot of insight into the trickier pitfalls of C++ and templates, you end up wiht scoped_ptr.
You can do something similar for each and every type of resource.
However, the need is recognized by many developers, so generic solutions exist (see - I can't put aside the thought of shared_ptr )
There are a few other options, too, like using ScopeGuards[^]
|
|
|
|
|
Thanks peterchen,
Cool trick.
regards,
George
|
|
|
|
|
I am using two functions
-------------------------
STDMETHODIMP get_Path(BSTR *pbstrPath);
STDMETHODIMP put_Path(BSTR pbstrPath);
my piece of code is
----------------------
_bstr_t m_bstrNewPath;
CHAR szFileName[MAX_PATH] = {0};
ZeroMemory(szFileName, sizeof(szFileName));
Edit_GetText(GetDlgItem(m_Dlg, IDC_PathEditCtrl),szFileName, MAX_PATH);
m_bstrNewPath = szFileName;
when i am calling the function it is ok
put_Path(m_bstrNewPath);
but when I am calling the function
get_Path(m_bstrNewPath);
it fires error
Cannot convert '_bstr_t' to 'wchar_t * *'
so please help me how to fix that bug
Rajesh
|
|
|
|
|
The safe way is to:
BSTR temp = 0;
HRESULT hr = get_Path(&temp);
m_bstrNewPath.Attach(temp);
The reason is that get_Path allocates the string and needs to return you a pointer, so the parameter uses double indirection of (chartype) ** .
_bstr_t, for various reasons, cannot safely wrap this operation.
There are a few circumstances where you can avoid the temporary (but you have to know exactly when - and when not). So rather play it safe and use above construct. There is no performance hit involved.
in get_Path, path is an [out] only parameter (i.e. the original valeu is ignored).
If you have a method with an [in/out] parameter, use:
_bstr_t path = ...;
BSTR temp = path.Detach();
HRESULT hr = comObject->ModifyPath(&temp);
path.Attach(temp);
if (FAILED(hr))
{
}
note the different order of attaching vs. error handling.
|
|
|
|
|
Hello everyone,
In the sample, I am wondering what is the life cycle of variable b_? Could we access variable b_ in catch block?
I have this confusion is because,
1. I think b_ is member variable, and we should be able to access it anywhere in the class itself, so we can access b_ in catch block;
2. I think b_ is declared and initialized in try {} block, and catch exceeds the {} of try, so we can not access b_ in catch block.
Which option is correct?
http://www.gotw.ca/gotw/066.htm
class C:
{
B b_;
C::C()
try
: b_( )
{
}
catch( ... )
{
}
};
thanks in advance,
George
|
|
|
|
|
George_George wrote: 2. I think b_ is declared and initialized...
I do see it as the member of the class. The variable is not being declared in the catch block.Had b_ been declared and initialized within the class it won't be available for use in the catch block. You can try doing this using a simple example:
class C
{
int b_;
public:
C():b_(10)
{
try
{
int t = 0;
int j = 20/t;
int c = t;
}
catch( ... )
{
cout<<b_<<endl;
}
}
};
Let me know that if I understood your problem statement correctly...
Somethings seem HARD to do, until we know how to do them.
_AnShUmAn_
|
|
|
|
|
Thanks _AnShUmAn_,
I have verified that we can access b_ in catch block. My question is answered.
regards,
George
|
|
|
|
|
Hi Experts,
1.Is there any simple artical to Darg Drop a file from ListView to ListBox?
2.I have created a file onto harddisk. Can I modify its data from in between?
|
|
|
|
|
Hmmm , I haven't tested this , but , have you enabled Drag and Drop on the HWND of the two controls? That way you will get a drop message when the user drags an item , then you should subclass the controls WndProc and handle only that message (call DefWindowProc when done handling) so that you can emulate Drag & Drop behaviour for the controls. You can do File Manipulation within the message handler itself.
The tears shed in vain
and the hatred and pain
will be nothing but dust
at the end of the day
|
|
|
|
|
Dear all,
can any body explain me what is the need of interface
are they just be usefull only for COM application...
Thanks in advance..
Vikas da
vikas da
|
|
|
|
|
tasumisra wrote: are they just be useful only for COM application...
Use of interfaces increases the modularity and maintainability of the code. Once COM components are developed the entire system is seen as a set of blocks that gel together to provide some functionality. Usually if you want to use third party softwares/functionality interfaces provide you the mechanism for achieving this.
Somethings seem HARD to do, until we know how to do them.
_AnShUmAn_
|
|
|
|
|
Hi All,
I want to display files huge files (Hexedit display format)in MFC. Any idea about doing this...
Manjunath S
GESL
Bangalore
|
|
|
|