В вашем контроллере MyController
вы должны ввести сервис, заменив:
MyService ss = new MyService();
на:
@Autowired
MyService ss;
Кроме того, вместо вашего ApplicationProperties
класса вы можно использовать аннотацию @Value
из Spring для загрузки свойств из файла application.properties
. Посмотрите на этот код:
import org.springframework.beans.factory.annotation.Value;
// ...
@Service
public class MyService {
@Value("${port}")
private String port;
// ...
}
Вы просто делаете
ptr.reset();
, Посмотрите shared_ptr руководство . Это эквивалентно
shared_ptr<T>().swap(ptr)
, Вы звоните reset
на каждом интеллектуальном указателе, который не должен больше ссылаться на объект. Последнее такой reset
(или любое другое действие, которое вызывает подсчет ссылок, опускаются до нуля, на самом деле) вызовет объект быть free'ed использование средства удаления автоматически.
, Возможно, Вы интересуетесь Методы программирования Интеллектуального указателя . Это имеет запись приблизительно задержанное освобождение .
Смысл boost::shared_ptr<T>
- то, что объект пуанта будет удален точно в тот момент времени, когда никакой shared_ptr<T>
с укажут на него - то есть, когда последнее shared_ptr<T>
указание на этот объект выходит из объема или повторно присвоено указать на другой объект. Так, все, что необходимо сделать для удаления объекта, удостоверяются, что нет никаких shared_ptr<T>
с, указывая на него. Например, если у Вас только есть сингл shared_ptr<T>
названный p
указание на объект, которому или позволяют это упасть из объема или вызова p.reset()
(эквивалентный p = NULL
для простого указателя), или присвоить его для указания на что-то еще.
, Если Вы имеете два shared_ptr<T>
с, указывая на объект, необходимо будет повторно присвоить им обоим.
РЕДАКТИРОВАНИЕ: Благодаря dehmann для указания, что p = NULL;
не на самом деле допустимый код для shared_ptr<T>
...:)
Что вы хотите сделать, это вернуть слабые ссылки, используя boost :: weak_ptr , который можно преобразовать к shared_ptr, когда это необходимо. Это может позволить вам контролировать время жизни объекта в shared_ptr, а те, кто хочет получить к нему доступ, могут удерживать weak_ptr и пытаться преобразовать в shared_ptr. Если это преобразование завершается неудачно, они могут повторно запросить и вернуть объект в память.
Если вы хотите иметь возможность намеренно удалять объекты (я делаю это все время), тогда вы должны использовать единоличное владение. Вас соблазнили использовать shared_ptr, когда это не подходит для вашего дизайна.