#include <iostream>
#include <vector>
using namespace std;
/// singleton class
class ConfigurationManager {
private:
string configuration_path;
vector<string> servers_ips;
string aws_service_url;
bool is_loaded = false;
static ConfigurationManager* obj;
ConfigurationManager() {}
void load() {
if (is_loaded) return;
cout << "Lazy Loading\n";
servers_ips.push_back("10.20.30.40");
servers_ips.push_back("10.20.30.41");
servers_ips.push_back("10.20.30.42");
aws_service_url = "https://d...content-available-to-author-only...s.com";
is_loaded = true;
}
public:
ConfigurationManager(const ConfigurationManager& other) = delete;
ConfigurationManager& operator=(const ConfigurationManager& other) = delete;
static ConfigurationManager* GetInstance() {
if (!obj) {
obj = new ConfigurationManager();
}
return obj;
}
string GetAwsServiceUrl() {
load();
return aws_service_url;
}
};
// Initialize static member
ConfigurationManager* ConfigurationManager::obj = nullptr;
void f1() {
ConfigurationManager* mgr = ConfigurationManager::GetInstance();
cout << "Instance address in f1: " << mgr << '\n';
cout << mgr->GetAwsServiceUrl() << '\n';
cout <<"-------------------------------------------\n";
}
void f2() {
ConfigurationManager* mgr = ConfigurationManager::GetInstance();
cout << "Instance address in f1: " << mgr << '\n';
cout << mgr->GetAwsServiceUrl() << '\n';
cout <<"-------------------------------------------\n";
}
int main() {
f1();
f2();
return 0;
}