Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Деструктор - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вывод слов с тремя или более гласными http://www.cyberforum.ru/cpp-beginners/thread278930.html
#include <cstdlib> #include <iostream> #include <string> using namespace std; int main(int argc, char *argv) { int s=0, g=0; string st;
C++ Программирование алгоритмов циклической структуры Найти сумму целых положительных чисел, больших 30 и меньших100, кратных трём и оканчивающихся на 2, 4 или 8. http://www.cyberforum.ru/cpp-beginners/thread278923.html
сжать массив C++
помогите пожалуйста Сжать заданный массив b1, b2,...,bm отбрасыванием нулевых элементов!решить с и спользованием функций
C++ неэффективная, при помоши рекуррентного спуска.
Здравствуйте! Помогите пожалуйста решить этим способом: • неэффективная, при помоши рекуррентного спуска. Входной текст состоит из слов с известными длинами (количеством символов) l1, l2,...,...
C++ класс с матрицами http://www.cyberforum.ru/cpp-beginners/thread278892.html
всем привет. очень нужна ваша помощь. прогу написал , но выдает 2 какие-то странные ошибки. посмотрите плиз , если вас не затруднит. ЗЫ : суть работы в том , чтобы написать класс , который...
C++ Чтение с файла Доброго времени суток. Проверьте пожалуйсто. Задание:В текстовом файле COEFF.DAT записаны числа (по три числа в строке),соответсвующие коэфицентам A , B и C квадратного уравнения A*X(в квадрете... подробнее

Показать сообщение отдельно
Nick Alte
Эксперт С++
1639 / 1011 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
18.04.2011, 21:06
Всё дело в передаче по значению: void f2(myclass cls)
при вызове f2 создаётся КОПИЯ cl, которая уничтожается при выходе из f2. При этом вызывается деструктор. Ну а поскольку для myclass не определён корректный конструктор копирования, в cls попадают копии всех полей, в том числе и адрес st. Строка по этому адресу освобождается при вызове деструктора для cls, при выходе из f2. После чего в cl.st остаётся тот же самый адрес, который уже показывает на освобождённый участок памяти. При уничтожении cl происходит попытка освободить его повторно, что и вызывает ошибку.
Выходы:
а) определить для myclass конструктор копирования, который создаёт копию строки;
б) передавать в функцию ссылку на myclass
void f2(const myclass& cls)
ну и для комплекта запретить копирование myclass, объявив в секции private заголовок конструктора копирования: myclass (const myclass&);
2
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru