Подскажите пожалуйста, правильно ли я реализовал ввод строки?
#include <iostream>
#include <stdio.h>
using namespace std;
class FirstClass
{
protected:
int str_size;
public:
char* str_value;
FirstClass() {}
FirstClass( int size ) {
str_size = size;
str_value = new char[str_size];
}
void set(char* value) {
str_value = value;
}
char* get() {
return str_value;
}
};
int main() {
FirstClass object(11);
object.set("dddddddddd");
printf("%s", object.get());
return 0;
}
Выводит всё правильно и без ошибок.
Нет, неправильно. Потому что вы как минимум теряете выделенную в конструкторе память, а сохраняете не саму строку, а указатель на нее.
Т.е., например, выполните
FirstClass object(1);
char s[] = "11111";
object.set(s);
object.get();
s[1] = '2';
object.get();
и вы увидите, что вывод - разный. Вряд ли это то, что вы хотите...
Update
void set(const char* value) {
delete[] str_value;
str_value = new char[strlen(value)+1];
strcpy(str_value, value);
}
FirstClass(const char* value):str_value(nullptr)
{
set(value);
}
~FirstClass() { delete[] str_value; }
Само собой, нужно в том же духе переписать оператор присваивания и копирующий конструктор...
Да, и
protected:
int str_size;
public:
char* str_value;
превратите в
private:
char* str_value;
а
char* get() {
в
const char* get() {
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
На странице JSP находиться форма для добавления данных в БД с 3 кнопками (Add,Update,Delete)
Привет, на протяжении долгого времени долблюсь с AJAXЕсть что-то на подобие чата
Плохая производительность сайта edge проблема в верстке есть ли какие то свойства для ускорения сайта на edge?
Делаю программу на electronПодключил jquery, и после написания кода решил запустить её