32bit_me (32bit_me) wrote,
32bit_me
32bit_me

Category:

Крест, крест, гроб, могила

Язык С++ настолько прекрасен, что иногда хочется кого-нибудь убить.

Пусть мы имеем шаблон класса:

// file MyClass.h
 
template <typename T> 
class MyClass { 
private: 
     MyClass();
public: 
    static MyClass<T>& getInstance();
    void foo(); 
}; 
 
template <typename T> 
MyClass<T>& getInstance()
{
    static MyClass<T> inst;
    return inst;
} 
 
template <typename T> 
MyClass<T>::MyClass() { 
    //...
} 
 
template <typename T> 
void MyClass<T>::foo() { 
    //...
} 
 


Здесь мы хотим использовать синглтон Мейерса, который реализует функция getInstance:

template <typename T> 
MyClass<T>& getInstance()
{
    static MyClass<T> inst;
    return inst;
} 


То есть, мы можем создать ссылки на экземпляр MyClass:

MyClass<int>& a = MyClass<int>::getInstance(); 


, причём фактически экземпляр класса будет создан один для каждого различного параметра шаблона. То есть для MyClass - один экземпляр, и не более, для MyClass - ещё один и т.д.

Внимание, вопросы знатокам: будет ли компилироваться такой код? будет ли он работать?

Ответ: да, компилироваться будет. Нет, работать не будет.

Потому что он не будет линковаться. То есть объектник мы получим, а линкер нам выдаст: "undefined reference to `MyClass::getInstance()".

Вот так.

А если мы сделаем так:

// file MyClass.h
 
template <typename T> 
class MyClass { 
private: 
     MyClass();
public: 
    static MyClass<T>& getInstance()
    {
        static MyClass<T> inst;
        return inst;
    } 
    void foo(); 
}; 
 
template <typename T> 
MyClass<T>::MyClass() { 
    //...
} 
 
template <typename T> 
void MyClass<T>::foo() { 
    //...
} 


то всё компилируется, собирается и работает. Почувствуйте разницу.
Tags: c++, программирование
Subscribe

  • Моя прелесть - 1

    SEL90M28G 1. 2. 3. 4. И сделанные им снимки: 1. Какая-то неведомая плата 2. Куплено в Минске, за нал, и с товарным чеком…

  • Das Keyboard

    Кликабельно.

  • Наушники Sony WH-1000XM3

    Купил наушники Sony WH-1000XM3 с блэкджеком и шлюхами с блютусом и шумоподавлением. Теперь вопрос уважаемым аудиофилам - должен ли…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 10 comments

  • Моя прелесть - 1

    SEL90M28G 1. 2. 3. 4. И сделанные им снимки: 1. Какая-то неведомая плата 2. Куплено в Минске, за нал, и с товарным чеком…

  • Das Keyboard

    Кликабельно.

  • Наушники Sony WH-1000XM3

    Купил наушники Sony WH-1000XM3 с блэкджеком и шлюхами с блютусом и шумоподавлением. Теперь вопрос уважаемым аудиофилам - должен ли…