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

Перегрузка new - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Запреты http://www.cyberforum.ru/cpp-beginners/thread98855.html
1. Можно ли запретить: 1.1. Создание локальных экземпляров класса, 1.2. Создание динамических экземпляров класса? 2. Если можно, то как запретить: 2.1. Создание локальных экземпляров класса, 2.2. Создание динамических экземпляров класса? Требуется что-то такое написать, после чего #define n ... // некая целая константа class a { ...}; // Некий класса, a obj1; // можно
C++ Можно ли создать глобальный обект, вызвав для него закрытый конструктор? Можно ли создать глобальный объект, вызвав для него закрытый конструктор? Как? http://www.cyberforum.ru/cpp-beginners/thread98532.html
Конструктор с параметром-объектом C++
class a { private: ... public: a (); ... }; class b {
stack overflow, math.h C++
вощм передается в sqrt(float _X) _X значением порядка 0.001234 программа ввылетает с сообщением о переполненном стеке и указывает в math.h вотсюда inline float sqrtf(_In_ float _X) {return ((float)sqrt((double)_X)); } //_X==0.0016005998 конкретно код
C++ Сортировка массива http://www.cyberforum.ru/cpp-beginners/thread98235.html
Здорова. Моя программа сортирует массив по диагоналям, то есть меняет местами элементы двух диагоналей квадратной матрицы. Ещё в задании есть пункт о том что не должны меняться местами максимальные элементы диагоналей. И вот после введения этого ограничения на максимальные числа программа перестала корректно работать. В некоторых тестах всё норм, а в некоторых меняет там где максимальное число а...
C++ Запись в файл. Кто подскажет как в файл записать 10 символ так... чтобы при этом не писался 13???? Добавлено через 3 минуты cout putc printf write ну я уже даже низнаю как еще можно писать((( подробнее

Показать сообщение отдельно
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,307
25.02.2010, 13:02     Перегрузка new
Цитата Сообщение от taras atavin Посмотреть сообщение
Память под экземпляры этого класса вообще не должна выделяться никуда, кроме его защищённых static-членов.
Вот как раз для этого и подойдет перегрузка new и delete:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
using namespace std;
 
struct X
{
    X() {};
    ~X() {};
    static X* clone() { return new X; }
    static void destroy(X* obj) { delete obj; }
 
protected:
    void* operator new(size_t bytes) { return ::operator new(bytes); }
    void operator delete(void* p) { ::operator delete(p); }
};
 
int main()
{
  // это не скомпилируется:
  // X* px = new X;
  // delete px;
  
  // а вот это ок:
  X* px = X::clone();
  X::destroy(px);
 
  return 0;
}
Добавлено через 49 секунд
Ну и аналогично с new[] и delete[].
 
Текущее время: 22:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru