2016-01-13 7 views
2

Безопасная или приемлемая практика создания «временных» объектов на C++ с пустой областью (например, следующая), чтобы обеспечить их немедленное уничтожение?C++ Уничтожение переменных с помощью области видимости

{ 
    SingularPurpose singular(&ptr_to_something); 
} 
+1

Примечание: В то время как этот код в ладно способ создать и сразу уничтожить что-то, * тот факт, что это полезно вещь делать * - запах кода. В хорошо продуманной программе этот код не принесет ничего полезного! – immibis

ответ

5

Да, это вполне приемлемая практика и может быть очень полезным для более, чем просто отдельные объекты. Например блокировки общих ресурсов, а некоторые операции выполняются и отпирания его автоматически, когда он выходит из области видимости:

// normal program stuff here ... 

// introduce an open scope 
{ 
    std::lock_guard<std::mutex> lock(mtx); // lock a resource in this scope 

    // do stuff with the resource ... 

    // at the end of the scope the lock object is destroyed 
    // and the resource becomes available to other threads  
} 

// normal program stuff continues ... 
6
  1. Ваш охват не является пустым. Он содержит объявление singular.

  2. Это совершенно нормально, но ...

  3. ... нет необходимости создавать переменную; Вы можете просто создать временный объект (который не является переменной):

    SingularPurpose(&ptr_to_something);