Где и в каких случаях правильно использовать extern? Собственно, сабж. Вопрос возник из ситуации. Есть класс, в методах которого используется экземпляр другого класса. В каждом методе я создавал этот экземпляр.
Использование ключевого слова extern в C++ рекомендуется в следующих случаях:
Для доступа к переменным или функциям, которые были объявлены в другом файле (к примеру, другом исходном файле или библиотеке).
Пример:
// В другом файле extern int globalVariable; // объявление // В текущем файле #include <iostream> extern int globalVariable; // использование int main() { std::cout << globalVariable << std::endl; return 0; }Для разрешения циклических зависимостей между классами.
В вашем конкретном случае, если вы создаете экземпляр другого класса в каждом методе, может быть более оптимальным использовать создание этого экземпляра в конструкторе вашего класса или хранить его как член класса. В зависимости от конкретной ситуации можно также применить методы паттерна проектирования "Singleton" или "Factory".
Использование ключевого слова extern в C++ рекомендуется в следующих случаях:
Для доступа к переменным или функциям, которые были объявлены в другом файле (к примеру, другом исходном файле или библиотеке).Пример:
// В другом файлеextern int globalVariable; // объявление
// В текущем файле
#include <iostream>
extern int globalVariable; // использование
int main() {
std::cout << globalVariable << std::endl;
return 0;
}Для разрешения циклических зависимостей между классами.
Пример:
// ClassA.hpp#ifndef CLASSA_HPP
#define CLASSA_HPP
#include "ClassB.hpp"
class ClassA {
public:
void methodA();
private:
ClassB instance;
};
#endif
// ClassB.hpp
#ifndef CLASSB_HPP
#define CLASSB_HPP
class ClassA; // forward declaration
class ClassB {
public:
void methodB(ClassA* a);
};
#endif
// ClassA.cpp
#include "ClassA.hpp"
void ClassA::methodA() {
instance.methodB(this);
}
// ClassB.cpp
#include "ClassB.hpp"
#include "ClassA.hpp"
void ClassB::methodB(ClassA* a) {
// do something
}
В вашем конкретном случае, если вы создаете экземпляр другого класса в каждом методе, может быть более оптимальным использовать создание этого экземпляра в конструкторе вашего класса или хранить его как член класса. В зависимости от конкретной ситуации можно также применить методы паттерна проектирования "Singleton" или "Factory".