You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Target machine and operating system (if different from host)
Any
Compiler name and version (including patch level)
Any
The $ACE_ROOT/ace/config.h file
Any (win32)
The $ACE_ROOT/include/makeinclude/platform_macros.GNU file
if you use a link to a platform-specific file, simply state which one (unless this isn't used in this case, e.g., with Microsoft Visual C++)
AREA/CLASS/EXAMPLE AFFECTED:
String_Base / ACE_CString
The problem effects:
Semantics.
Synopsis
ACE_CString cannot take ownership of a char * allocated by a ACE_Allocator.
Description
ACE_CString can copy a char* into a new allocation with an ACE_Allocator (which it will free), or it can use an existing pointer but will not free it. Noteably, there is no way to take ownership of a char* (allocated by an ACE_Allocator) and free it when necessary.
This is a problem, because ACE_Read_Buffer->read returns just such a bare pointer. This encourages the bad practice of direction pointer management (as the only examples with ACE_Read_Buffer do), rather than the safe C++ practice of RAII.
Not aware of any correct workaround. One can technically often use a CORBA::String_var, but this only works by coincidence, as its destructor always calls delete[], which is what the default ACE_Allocator does (ACE_New_Allocator), but this is not generally correct code. Is there any ACE RAII class that can take a pointer (and a pointer to the ACE_Allocator that allocated it) and take ownership of it, and free it in its destructor? Is there a higher-level buffered file-reading class ACE_Read_Buffer that returns an RAII-managed pointer?
The text was updated successfully, but these errors were encountered:
Version
Any / Latest (8.0.2)
Host machine and operating system
Any / Windows 11
Target machine and operating system (if different from host)
Any
Compiler name and version (including patch level)
Any
The $ACE_ROOT/ace/config.h file
Any (win32)
The $ACE_ROOT/include/makeinclude/platform_macros.GNU file
if you use a link to a platform-specific file, simply state which one (unless this isn't used in this case, e.g., with Microsoft Visual C++)
AREA/CLASS/EXAMPLE AFFECTED:
String_Base / ACE_CString
The problem effects:
Semantics.
Synopsis
ACE_CString
cannot take ownership of achar *
allocated by aACE_Allocator
.Description
ACE_CString can copy a
char*
into a new allocation with anACE_Allocator
(which it will free), or it can use an existing pointer but will not free it. Noteably, there is no way to take ownership of achar*
(allocated by anACE_Allocator
) and free it when necessary.This is a problem, because
ACE_Read_Buffer->read
returns just such a bare pointer. This encourages the bad practice of direction pointer management (as the only examples withACE_Read_Buffer
do), rather than the safe C++ practice of RAII.Repeat by
Sample fix/ workaround
Not aware of any correct workaround. One can technically often use a
CORBA::String_var
, but this only works by coincidence, as its destructor always callsdelete[]
, which is what the defaultACE_Allocator
does (ACE_New_Allocator
), but this is not generally correct code. Is there any ACE RAII class that can take a pointer (and a pointer to theACE_Allocator
that allocated it) and take ownership of it, and free it in its destructor? Is there a higher-level buffered file-reading classACE_Read_Buffer
that returns an RAII-managed pointer?The text was updated successfully, but these errors were encountered: