Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
2 / 2 / 0
Регистрация: 01.10.2016
Сообщений: 63
1

Определить классы которые могут существовать только на стеке/динамически/которые нельзя копировать

30.06.2017, 17:30. Показов 1332. Ответов 7
Метки нет (Все метки)

Определить 3 класса.
1. Объекты могут существовать только локально на стеке (как это понять?).
2. Объекты могут существовать только в динамической памяти.
3. Объекты нельзя копировать (нужно поместить конструктор копирования в private?).
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.06.2017, 17:30
Ответы с готовыми решениями:

Найти все возможные треугольники, которые могут существовать. Результат вывести на экран.
Функция которая по 3 десятичным числам проверяет, могут ли числа быть сторонами треугольника. C...

Копировать из одной папки только те файлы, которые есть в другой
Есть вырезки из кода :set cls echo. choice /C 21 /N /m "Создать резервную копию" if errorlevel...

Вывести только те слова, которые могут без искажений быть записаны латинскими символами
3.Дан текст на русском языке. Вывести только те слова, которые могут без иска* жений быть записаны...

Вывести на экран только предложения, которые начинаются с тире (перед ним могут находиться пробелы)
Всем привет. Вот задали написать программу. Но на деле пока никак не могу реализовать. Задание: В...

7
Форумчанин
Эксперт CЭксперт С++
8167 / 5015 / 1436
Регистрация: 29.11.2010
Сообщений: 13,455
30.06.2017, 18:13 2
Лучший ответ Сообщение было отмечено Букер как решение

Решение

1. Возможно имеется в виду что-то типа
C++
1
2
3
4
5
6
class A
{
public:
    void *operator new(size_t) = delete;
    void *operator new[](size_t) = delete;
};
2. Приватный деструктор
3.
C++
1
Obj(const Obj &) = delete;
1
0 / 0 / 0
Регистрация: 08.06.2017
Сообщений: 1
30.06.2017, 18:34 3
1. Для создания объектов в динамической памяти(на куче) необходим конструктор по умолчанию. Если поместить его в private область, то объект можно будет создать только локальный(на стеке).
0
2 / 2 / 0
Регистрация: 01.10.2016
Сообщений: 63
01.07.2017, 10:53  [ТС] 4
1. Класс может существовать только на стеке, если его конструктор по умолчанию, например,
C++
1
Type(){}
, расположен в private.
2. Класс может существовать только в динамической памяти, если его деструктор, например,
C++
1
virtual ~Type(){}
, расположен в private?
3. Для того чтобы объекта класса было нельзя копировать, нужно сделать следующее
C++
1
2
Type(const Type&) = delete; 
Type& operator =(const Type&) = delete;
Все правильно?
0
Don't worry, be happy
17043 / 9932 / 1913
Регистрация: 27.09.2012
Сообщений: 24,665
Записей в блоге: 1
01.07.2017, 11:05 5
Цитата Сообщение от Букер Посмотреть сообщение
Класс может существовать только на стеке, если его конструктор по умолчанию, например
Да ладно?
C++
1
2
3
4
5
6
7
8
9
class X{
    X() {}
};
 
 
int main()
{
    X x;//<--Ошибка. И на стеке создать нельзя.
}
Цитата Сообщение от Букер Посмотреть сообщение
Класс может существовать только в динамической памяти, если его деструктор расположен в private?
Класс - это тип. Никаких классов на стеке не создать.
А объект я могу создать на стеке с помощью placement new.

Добавлено через 2 минуты
Цитата Сообщение от vokaylsik Посмотреть сообщение
Для создания объектов в динамической памяти(на куче) необходим конструктор по умолчанию.
А для объектов на стеке не нужен?
Цитата Сообщение от vokaylsik Посмотреть сообщение
Если поместить его в private область, то объект можно будет создать только локальный(на стеке).
Что за бредятина? Пример выше.
0
2714 / 1881 / 556
Регистрация: 05.06.2014
Сообщений: 5,481
01.07.2017, 11:07 6
Цитата Сообщение от Букер Посмотреть сообщение
1. Класс может существовать только на стеке, если его конструктор по умолчанию, например,
C++
1
Type(){}
, расположен в private.
С каких лосей?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class Test
{
public:
    Test(int){}//конструктор не по умолчанию
private:
    Test(){}//конструктор по умолчанию
};
 
int main()
{
    new Test(1);
    return 0;
}
0
2 / 2 / 0
Регистрация: 01.10.2016
Сообщений: 63
01.07.2017, 11:22  [ТС] 7
Я написал то, что мне ответили выше. С третьим классом, который нельзя копировать, уже все понятно. Как создать классы, объекты которых могут существовать только на стеке/только в динамической памяти?
0
2714 / 1881 / 556
Регистрация: 05.06.2014
Сообщений: 5,481
01.07.2017, 11:54 8
Цитата Сообщение от Букер Посмотреть сообщение
Как создать классы, объекты которых могут существовать только на стеке/только в динамической памяти?
А никак. Защита предложенная вам во втором посте, обходится заменой new на ::new. Будете и глобальный operator new как delete помечать?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include<cstddef>
class A
{
public:
    void *operator new(size_t) = delete;
    void *operator new[](size_t) = delete;
};
 
int main()
{
    ::new A;
    return 0;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.07.2017, 11:54

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Определить виды блюд, которые есть только на завтраке, только на обеде и только на ужине
В столовой имеются отдельные меню на завтрак, обед и ужин. Известно, что в каждом таком меню не...

Определить номера точек, которые могут являться вершинами квадрата.
Кто нибудь может помочь решить задачу с однмерным масивом? Условие звучит так: В одномерном...

Определить номера точек, которые могут являться вершинами квадрата
Мне нужно сделать в WindowsApplication В одномерном массиве с четным количеством элементов (2N)...

Определить число студентов, которые могут заниматься в баскетбольной секции
Организовать ввод, хранение в массиве, вывод на экран данных о сту¬дентах: фамилия, имя, отчество,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.