new и время жизни
public: INT32 Length;
char* LinePtr;
OString( char from[]="")
{
INT32 i;
for (i=0; from!= '\0';i++)
{}
Length=i+1;
LinePtr =new char [Length];
strcpy(LinePtr,from);
}
OString(char from[], INT32 sz)
{//Принимается указатель на массив и его размер (sizeof())
Length=sz;
LinePtr = new char[sz];
strcpy(LinePtr,from);
}
};
Так вот вопрос, при уничтожении объекта данного типа память выделенная оператором new будет освобождаться или нужно переопределять деструктор?
1. Работая с указателями работайте с указателями *
2. Есть такая прекрасная функция strlen
3. Для копирования памяти указанной длины используйте memcpy и в конец добавляйте символ '\0'
{
if (LinePtr != NULL) delete [] LinePtr;
if (this != NULL)delete this;
}
Далее
SMPP::BasicTypes::OString str="fffffffffffffff";
}
Возникает ошибка при завершении блока.
[ATTACH=CONFIG]5443[/ATTACH]
2) перегрузи operator = или SMPP::BasicTypes::OString("fffffffffffffff");
ну а вообще ошибка не понятная - больше кода нужно посмотреть
Если я правильно понял, то как-то вот так, И = перегружать не надо.?
{
LinePtr = new char [cpy.Length];
memcpy(LinePtr, cpy.LinePtr, cpy.Length);
Length=cpy.Length;
}
Такое можно?
{
Length=obj.Length;
LinePtr=new char[obj.Length];
memcpy(LinePtr,obj.LinePtr,obj.Length);
return *this;
}
Выдает аж 4 ошибки
1>SMPP34.cpp
1>... error C2143: syntax error : missing ';' before '&'
1>... error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>... error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>... error C2440: 'return' : cannot convert from 'SMPP::BasicTypes::OString' to 'int &'
Смотрю аналогичные коды. Все вроде так. Но почему ошибки?....
{
if (LinePtr != NULL) delete [] LinePtr;
//if (this != NULL)delete this; // это не нужно!
}
В деструкторе нужно освободить все занимаемые ресурсы. Но самого себя удалять не нужно.
SMPP::BasicTypes::OString str="fffffffffffffff";
}
Опять :(. Опять смесь управляемого и неуправляемого кода :(.
Мой вам совет: если хотите освоить нативный C++, то не используйте проект WindowsForms. А если нет пока понимания, чем отличается управляемый от неуправляемого кода, если нет понимания, что такое платформа .NET, то лучше всего взять вместо Visual Studio другую среду разработки, в которой нет поддержки .NET. Там невозможно будет намешать в кучу и то, и другое.
А знакомство с управляемым кодом лучше начать с языка C#. После некоторого его освоения, при необходимости соединения кода с нативным C++, можно будет переключиться на C++/CLI.
Опять :(. Опять смесь управляемого и неуправляемого кода :(.
Мой вам совет: если хотите освоить нативный C++, то не используйте проект WindowsForms. А если нет пока понимания, чем отличается управляемый от неуправляемого кода, если нет понимания, что такое платформа .NET, то лучше всего взять вместо Visual Studio другую среду разработки, в которой нет поддержки .NET. Там невозможно будет намешать в кучу и то, и другое.
А знакомство с управляемым кодом лучше начать с языка C#. После некоторого его освоения, при необходимости соединения кода с нативным C++, можно будет переключиться на C++/CLI.
Да понятно, что нехорошо это. Свой код я пишу на нативном (кажется), а Windows Forms использую для простоты. Нажал кнопку и посмотрел результат. Конечно есть другие способы для этого, возможно более простые. Но я их не очень понимаю. Например, в консольное мне кажется староватым, а WinAPI и MFC сложноватым по сравнению c .Net.
Консоль—это когда не надо тратить много времени на интерфейс,ибо он предполагает только простейшее взаимодействие.WinAPI—не так уж и сложно,главное—понять основы.А в .Net всё слишком уж упрощено и для всего есть велосипеды(однако,некоторые умудряются изобретать свои:))
Всем спасибо.
Разобрался и с конструкторами и с перегрузкой =
Когда делаешь по книге или по наработкам не видишь полной картины, а вот когда все с нуля....
Да, хорошо... В процессе обучения. А вот для практических разработок не всегда хорошо.