powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Удаление объекта класса с полем типа string.
13 сообщений из 13, страница 1 из 1
Удаление объекта класса с полем типа string.
    #39228404
.NET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Удаление объекта класса с полем типа string.
    #39228406
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.NETПочему программа падает в деструкторе string?
Может, потому, что test - вовсе не массив?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Удаление объекта класса с полем типа string.
    #39228407
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.NET,

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

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

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

Код: 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
Удаление объекта класса с полем типа string.
    #39228438
L.Otujktd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
.NET,

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

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

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


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