Что не так в следующем фрагменте?

Я знаю, что это довольно простое нарушение, но что это?

class xyz
{
void function1()
{
cout<<"in class";
}
};

int main()
{
xyz s1 = new xyz(100);
xyz s2 = s1;
s2.function1();
delete s1;
return 0;
}

Что-то не так с распределением памяти с помощью new, Я верю, но я не могу понять фундамент, стоящий за этим и резолюцию.

-4

Решение

new возвращает указатель (xyz *) к объекту, а не к объекту, поэтому вы должны исправить тип s1:

xyz* s1=new xyz(100);

и для вызова метода через указатель вы должны использовать оператор ->:

s1->function1();

что эквивалентно разыменованию указателя и вызову метода на объекте:

(*s1).function1();
2

Другие решения

Вы не можете назначить T* в T (патологические случаи в стороне).

xyz * s1 = new xyz();
xyz * s2 = s1;
s2->function1();
delete s1;
return 0;

Еще лучше, не используйте голый new а также delete и используйте умный указатель:

auto s1 = make_unique<xyz>();
xyz * s2 = s1.get(); // non-owning pointer
s2->function1();
// no explicit delete necessary
4

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector