Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Удаление объекта класса с полем типа string. / 13 сообщений из 13, страница 1 из 1
02.05.2016, 15:19
    #39228404
.NET
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление объекта класса с полем типа string.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
class Test
{
public:
	Test(string s) : str(s) { }

private:
	string str;
};

int main()
{
	Test *test = new Test("Hello, World!!!");
	delete[] test;

	cin.clear();
	cin.get();
}



Почему программа падает в деструкторе string?
Как поправить?
...
Рейтинг: 0 / 0
02.05.2016, 15:31
    #39228406
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление объекта класса с полем типа string.
.NETПочему программа падает в деструкторе string?
Может, потому, что test - вовсе не массив?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
02.05.2016, 15:31
    #39228407
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление объекта класса с полем типа string.
.NET,

А зачем вы создаете одиночный объект, а удаляете его как массив?
...
Рейтинг: 0 / 0
02.05.2016, 16:21
    #39228422
.NET
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление объекта класса с полем типа string.
Dimitry Sibiryakov,Dimitry Sibiryakov
Да, спасибо.

Предыдущая тема, которую изучал была связана с массивами.
Автоматически поставил скобки.
...
Рейтинг: 0 / 0
02.05.2016, 16:28
    #39228426
.NET
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление объекта класса с полем типа string.
Опять накосячил.

Anatoly Moskovsky,
Благодарю
...
Рейтинг: 0 / 0
02.05.2016, 17:25
    #39228432
.NET
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление объекта класса с полем типа string.
А почему вот так не получается обработать это исключение?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
	Test *test = new Test("Hello, World!!!");

	try
	{
		delete[] test;
	}
	catch (exception e)
	{
		cout << e.what() << endl;
	}
...
Рейтинг: 0 / 0
02.05.2016, 17:44
    #39228438
L.Otujktd
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление объекта класса с полем типа string.
.NET,

Исключения в деструкторе насколько помню обрабатывать нельзя. А зачем вам лишнее создание объекта типа string в конструкторе?Передавайте cost char* в явном виде.
...
Рейтинг: 0 / 0
02.05.2016, 23:34
    #39228497
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление объекта класса с полем типа string.
.NETА почему вот так не получается обработать это исключение?
Потому что delete[] для не массива - это undefined behavior, а в этом случае вам вообще ничего не обещают, могут даже диск форматнуть, и все будет в рамках стандарта.
...
Рейтинг: 0 / 0
02.05.2016, 23:36
    #39228498
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление объекта класса с полем типа string.
L.OtujktdИсключения в деструкторе насколько помню обрабатывать нельзя.
Можно.
Нельзя бросать исключение в деструкторе, если он вызван в результате размотки стека от другого брошенного исключения.
Все остальное можно.
...
Рейтинг: 0 / 0
03.05.2016, 00:06
    #39228501
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление объекта класса с полем типа string.
Но чтобы ловить Sementation Fault aka Access Violation нужны дополнительные телодвижения.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
03.05.2016, 00:09
    #39228503
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление объекта класса с полем типа string.
Dimitry SibiryakovНо чтобы ловить Sementation Fault aka Access Violation нужны дополнительные телодвижения.
Его не всегда можно словить, а когда можно, то не всегда имеет смысл )))
...
Рейтинг: 0 / 0
03.05.2016, 02:23
    #39228516
alexy_black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление объекта класса с полем типа string.
а что за exception в catch блоке? std::exception? исключения унаследованные от этого класса бросаются только стандартной библиотекой или библиотекой, которая хочет бросать исключения, унаследованные от этого класса (хотя так многие делают, это удобно). чтобы поймать какое-нибудь исключение, вроде обсуждаемого, нужно писать ... в блоке catch - то есть любое. при этом объект исключения не будет доступен.

кстати, using namespace std обычно плохо заканчивается. лучше писать полностью. вобще, я стараюсь писать такие объявления только в начале функции, в котрой я реально много раз исполюзую что-нибудь из длинного пространства имен. или можно так - namespace spl=std::placeholders например. это лучше, чем сразу гадить в глобальную видимость все std.
...
Рейтинг: 0 / 0
03.05.2016, 19:25
    #39228712
NekZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление объекта класса с полем типа string.
alexy_blackа что за exception в catch блоке? std::exception? исключения унаследованные от этого класса бросаются только стандартной библиотекой или библиотекой, которая хочет бросать исключения, унаследованные от этого класса (хотя так многие делают, это удобно). чтобы поймать какое-нибудь исключение, вроде обсуждаемого, нужно писать ... в блоке catch - то есть любое. при этом объект исключения не будет доступен.

Судя по всему, std::exception, поскольку у него такие же string и cout.
Да и не будет там исключений (хотя, ручаться нельзя, ведь это же UB, поведение которого зависит от фазы луны).
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Удаление объекта класса с полем типа string. / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]