i try make own small string class practice purposes. want overload const wchar_t* operator return buffer saved within string object fails, when access object. it's conversion operator isn't called. works, when explicitly type cast object via (const wchar_t*) mystring
edit:
// cstring.h class cstring { private: wchar_t* _string; void set(const wchar_t text[]); public: cstring(); cstring(const wchar_t text[]); cstring(const cstring& text); ~cstring(); operator const wchar_t*() const; }; // cstring.cpp #include "cstring.h" cstring::cstring() { set(l""); } cstring::cstring(const wchar_t text[]) { set(text); } cstring::~cstring() { delete[] _string; } void cstring::set(const wchar_t text[]) { delete[] _string; _string = new wchar_t[wcslen(text)]; wcscpy(_string, text); } cstring::operator const wchar_t*() const { return _string; } // main.cpp int main() { cstring* helloworld = new cstring(l"test 123"); messagebox(null, helloworld, l"", mb_ok); // doesn't work messagebox(null, (const wchar_t*) helloworld, l"", mb_ok); // works, don't explicitly want use cast everytime. return 0; }
first, if working in windows, cstring
class atl/mfc. reusing same name class of own rude.
if aren't, should provide signature messagebox
.
i'll assume working in windows world.
your problem cstring*
not same thing cstring
. defined operator turn cstring
wchar_t const*
. not surprisingly, doesn't work cstring*
.
change definition of helloworld
cstring helloworld = cstring(l"test 123");
-- no new
, no pointers -- , code works.
as yet aside, explicit cast did results in undefined behavior, reinterprets pointer object pointer buffer of characters. 1 of many, many reasons why using c-style casts bad idea, because difference between reinterpret cast , static cast requires lot of context. see error, change messagebox call messagebox( null, static_cast<const wchar_t*>(helloworld), l"", mb_ok);
did code explicit cast ever run , print sensible?
if must put helloworld
in free store, dereference when using (in both implicit, , explicit cast cases). ie, replace uses of helloworld
*helloworld
. advise against -- there no reason store particular instance on free store.
Comments
Post a Comment