이전에 한 객체의 인스턴스를 더 이상 정의 할 수 없다는 내용을 읽었습니다. 하지만 그 기사를 다시 찾을 수는 없습니다. 다른 사람이 클래스의 다른 객체를 정의하지 못하도록하는 방법을 말해 줄 수 있습니까? CLog
?클래스의 인스턴스를 두 개 이상 정의 할 수 없음
class CLog
{
........
} log;
이전에 한 객체의 인스턴스를 더 이상 정의 할 수 없다는 내용을 읽었습니다. 하지만 그 기사를 다시 찾을 수는 없습니다. 다른 사람이 클래스의 다른 객체를 정의하지 못하도록하는 방법을 말해 줄 수 있습니까? CLog
?클래스의 인스턴스를 두 개 이상 정의 할 수 없음
class CLog
{
........
} log;
싱글 톤에 대한 또 다른 해결책은 Service Locator
패턴을 사용하는 것입니다.
좋은 설명과 사용 방법은 http://gameprogrammingpatterns.com/service-locator.html에 설명되어 있습니다.
싱글 톤과 마찬가지로이 패턴은 아껴서 사용해야하지만 로깅 시스템은 좋은 사용 사례가 될 수 있으며 그 외에는 새로운 디자인 패턴을 가르치지 않습니다.
생성자를 비공개로 만듭니다. 클래스의 인스턴스를 반환하는 public 메서드를 하나 정의하십시오.
class sample{
private:
sample(){};
static *sample instance;
public:
static *sample getInstance(){
if (instance != null)
instance = new sample();
return instance;
}
의 getInstance() 메소드는 그것이 기존 그렇지 않으면 당신이 클래스의 단일 인스턴스를 생성하는 클래스를 만들 수있는이 방법 one.In 새로운 생성 retuns 존재하는 경우 인스턴스가 존재 여부를 확인 작성하기 전에 클래스의 인스턴스를 생성 . 생성자는 private이므로 아무도 생성자를 사용하여 객체를 만들 수 없습니다.
Google * 싱글 톤 패턴 * 그리고 왜 [사용하지 말아야하는지]에 대해 읽어보십시오. (http://jalf.dk/blog/2010/03/singletons-solving-problems-you-didnt-know-you -never-had-since-1995 /). – Praetorian
@Praetorian 나는 log2와 log3을 정의하는 것을 막고 싶다 .... 내 프로그램이 디버그 모드에 있더라도이를 피해야한다고 생각합니까? – barej
디버그 모드는 정의와 아무 관련이 없습니다. 예, Singleton이 대답입니다.) –