Рубрики

Как ограничить динамическое размещение объектов в C ++?

Язык программирования C ++ допускает как автоматические (или выделенные в стеке), так и динамически размещаемые объекты. В java & C # все объекты должны динамически размещаться с использованием new.
C ++ поддерживает объекты, выделенные из стека, в целях эффективности времени выполнения. Основанные на стеке объекты неявно управляются компилятором C ++. Они уничтожаются, когда выходят из области видимости, и динамически размещенные объекты должны быть освобождены вручную, используя оператор удаления, в противном случае происходит утечка памяти. C ++ не поддерживает подход автоматического сбора мусора, используемый такими языками, как Java & C #.

Как нам добиться следующего поведения из класса «Test» в C ++?

Test* t = new Test; // should produce compile time error
Test t;    // OK 

Идея состоит в том, чтобы сохранить новую операторную функцию частной, чтобы новая не могла быть вызвана. Смотрите следующую программу. Объекты класса 'Test' не могут быть созданы с использованием new, так как новая операторная функция является приватной в 'Test'. Если мы раскомментируем 2-ю строку main (), программа выдаст ошибку времени компиляции.

#include <iostream>

using namespace std;

  
// Объекты Test не могут быть размещены динамически

class Test

{

    // Обратите внимание, новая операторная функция является приватной

    void* operator new(size_t size);

    int x;

public:

    Test()          { x = 9; cout << "Constructor is called\n"; }

    void display()  { cout << "x = " << x << "\n";  }

    ~Test()         { cout << "Destructor is executed\n"; }

};

  

int main()

{

    // Раскомментирование следующей строки вызовет ошибку времени компиляции.

    // Test * obj = new Test ();

    Test t;          // Хорошо, объект размещен во время компиляции

    t.display();

    return 0;

} // объект выходит из области видимости, вызывается деструктор

Выход:

Constructor is called
x = 9
Destructor is executed

Ссылка:
Дизайн и развитие C ++, Бьярне Страуструп

Эта статья предоставлена Pravasi Meet . Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Как ограничить динамическое размещение объектов в C ++?

0.00 (0%) 0 votes