string::string(char* data_pointer)
{
_size = (long)strlen(data_pointer);
_pointer = new char[_size];
memcpy(_pointer, data_pointer, _size);
};
ncommon::string test = ncommon::string("test");
string::string(char* data_pointer)
{
_size = (long)strlen(data_pointer);
_pointer = new char[_size];
memcpy(_pointer, data_pointer, _size);
};
ncommon::string test = ncommon::string("test");
Quote:Original post by 3dmodelerguy
I get the memory leak because the destructor is never called which deletes the memory created in the constructor. Is there a way to fix this?
ncommon::string test = ncommon::string("test");
Quote:Original post by 3dmodelerguy
does that mean the std::string also has an incorrect copy construct?
Quote:Original post by SneftelQuote:Original post by 3dmodelerguy
does that mean the std::string also has an incorrect copy construct?
No, it means that std::string has a manually defined correct copy constructor.
Quote:Original post by SneftelQuote:Original post by 3dmodelerguy
does that mean the std::string also has an incorrect copy construct?
No, it means that std::string has a manually defined correct copy constructor.
Quote:Original post by 3dmodelerguyQuote:Original post by SneftelQuote:Original post by 3dmodelerguy
does that mean the std::string also has an incorrect copy construct?
No, it means that std::string has a manually defined correct copy constructor.
but when I created a string will std:string that is say 60 character longs I get a memory leak
string::string(char* data_pointer){ _size = (long)strlen(data_pointer) + 1; // Add one for the null terminator _pointer = new char[_size](); // Make sure buffer is zereo'd memcpy(_pointer, data_pointer, _size);};
string::string(const string& rhs){ _size = (long)strlen(rhs._pointer) + 1; // Add one for the null terminator _pointer = new char[_size](); // Make sure buffer is zereo'd memcpy(_pointer, rhs._pointer, _size);};
string::operator=(const string& rhs){ _size = (long)strlen(rhs._pointerr) + 1; // Add one for the null terminator _pointer = new char[_size](); // Make sure buffer is zere'od memcpy(_pointer, rhs._pointer, _size); return *this;};
string::~string(){ if(_pointer) { delete [] _pointer; _pointer = 0; }};
Quote:Original post by 3dmodelerguy
but when I created a string will std:string that is say 60 character longs I get a memory leak
Quote:Original post by fpsgamer
Here is the user defined assignment operator that you're lacking:
*** Source Snippet Removed ***
string& string::operator=(const string& rhs){ char* oldPointer = _pointer;//don't do the delete immediately, in case new throws an exception. This way the internal state is preserved. long size = (long)strlen(rhs._pointer) + 1; // Add one for the null terminator _pointer = new char[size](); // Make sure buffer is zere'od _size = size; delete [] oldPointer; memcpy(_pointer, rhs._pointer, size); return *this;};