|  3.10.2015 / 16:38 |  | 
| Naik    Пользователь 
  Сейчас: Offline 
 Имя: %name%Регистрация: 14.03.2010
 
 | На windows 7 не понимает кодировки utf-8 в cmd, сохранил исходник в windows-1251, перестал выводиться лог в консоль SublimeText, но скомпилилось таки. Кириллица отображается, но не отображается буква і Локаль ставил ( setlocale(LC_ALL, "") ), шрифт в cmd менял - не помогло
 Изменено Naik (3.10 / 16:38) (всего 2 раза)
 | 
|  5.10.2015 / 17:00 |  | 
| Banschey    Пользователь 
  Сейчас: Offline 
 Имя: BanscheyОткуда: Донецк, Украина
 Регистрация: 22.03.2015
 
 | Открыть спойлер Закрыть спойлер class strtype{public:    strtype(char t[]);    ~strtype();    void print();private:   char *t = new char[];};strtype::strtype( char t[]){    this->t = t;}strtype::~strtype(){    delete []t;}void strtype::print(){    std::cout << t << std::endl; }  int main(){    strtype s("sd");    s.print();    _getch();     return 0;}
При удалении t выбивает ошибку того что память была очищена, BLOCK_TYPE_IS_VALID(phead->nBlockUse), нужен конструктор копирования как я понял а вот как сделать не знаю. Знает кто ?Изменено Banschey (5.10 / 17:01) (всего 1 раз)
 | 
|  5.10.2015 / 17:18 |  | 
| Banschey    Пользователь 
  Сейчас: Offline 
 Имя: BanscheyОткуда: Донецк, Украина
 Регистрация: 22.03.2015
 
 | Понял в чем проблема, сама конструкция не правильная.
 | 
|  5.10.2015 / 17:30 |  | 
| Banschey    Пользователь 
  Сейчас: Offline 
 Имя: BanscheyОткуда: Донецк, Украина
 Регистрация: 22.03.2015
 
 | Но суть задание в этом:Создайте класс ,
 который динамически выделяет память под строку.
 Сама строка задается как параметр конструктора.
 Для выделения памяти используйте операторы new и delete.
 
 | 
|  5.10.2015 / 17:30 |  | 
| Naik    Пользователь 
  Сейчас: Offline 
 Имя: %name%Регистрация: 14.03.2010
 
 | Banschey,  конструктор копирования — обычный конструктор, который принимает (const strtype &s)может можно и без const
 
 p.s. концепция правильная, только это лишнее char *t = new char[]; можно просто char *t;
 
 И я бы поменял в конструкторе массив на обычный указатель, так код понятнее, имхо
 
 Изменено Naik (5.10 / 17:34) (всего 2 раза)
 | 
|  5.10.2015 / 17:38 |  | 
| Banschey    Пользователь 
  Сейчас: Offline 
 Имя: BanscheyОткуда: Донецк, Украина
 Регистрация: 22.03.2015
 
 | Naik, можно пример ?    Просто нужно удалить этот массив, но выдает что он уже был удален, значит обращение было к тому что переданно в конструктор а не к новому массиву.Изменено Banschey (5.10 / 17:40) (всего 1 раз)
 | 
|  5.10.2015 / 17:44 |  | 
| Naik    Пользователь 
  Сейчас: Offline 
 Имя: %name%Регистрация: 14.03.2010
 
 | Banschey, надо скопировать строку в конструкторе в новую область памяти
 | 
|  5.10.2015 / 17:47 |  | 
| Banschey    Пользователь 
  Сейчас: Offline 
 Имя: BanscheyОткуда: Донецк, Украина
 Регистрация: 22.03.2015
 
 | Вот как  это сделать ? ) не знаю
 | 
|  5.10.2015 / 17:53 |  | 
| Naik    Пользователь 
  Сейчас: Offline 
 Имя: %name%Регистрация: 14.03.2010
 
 | Banschey,  #include <cstring>#include <iostream> class Holder {     char *str; public:     Holder() : str(0) {} // default constructor     Holder(char *str) {        this->str = new char[strlen(str) + 1];        strcpy(this->str, str);    }     ~Holder() {        if (str) delete [] str;    }     // const чтобы нельзя было делать такой фигни holder.getString()[0] = 'B';    const char* getString() {        return str;    } }; int main(int argc, char const *argv[]) {    Holder holder("Testovaya stroka");    std::cout << holder.getString();    return 0;}
Только вот преобразование строки в указатель объявлено устаревшимwarning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]Изменено Naik (5.10 / 18:03) (всего 4 раза)
 | 
|  5.10.2015 / 18:37 |  | 
| Banschey    Пользователь 
  Сейчас: Offline 
 Имя: BanscheyОткуда: Донецк, Украина
 Регистрация: 22.03.2015
 
 | Naik , всё работает спс ) чтоб работала нужно в начале прописать #pragma warning(disable : 4996)
 |