Check following A.h
:
# cat A.h
#pragma once
#include <iostream>
#include <vector>
class A
{
public:
std::vector<int> v;
A()
{
v.push_back(1);
std::cout << "Enter A's constructor...\n";
}
int getFirstElem()
{
v.push_back(2);
std::cout << "Enter A's getFirstElem...\n";
return v[0];
}
~A()
{
std::cout << "Enter A's destructor...\n";
}
};
int func();
And A.cpp
:
# cat A.cpp
#include "A.h"
static A a;
int func()
{
return a.getFirstElem();
}
The A.cpp
just define a A
‘s static instance, and a func()
returns first element in a
‘s internal vector.
Check another file which utilizes A.h
and A.cpp
:
# cat hello.cpp
#include <iostream>
#include "A.h"
static int gP = func();
int main()
{
std::cout << gP << std::endl;
return 0;
}
Compile them:
# clang++ -c hello.cpp
# clang++ -c A.cpp
Link hello.o
first and execute the program:
# clang++ hello.o A.o
# ./a.out
Enter A's getFirstElem...
Enter A's constructor...
2
Enter A's destructor...
Then link A.o
first and execute the program:
# clang++ A.o hello.o
# ./a.out
Enter A's constructor...
Enter A's getFirstElem...
1
Enter A's destructor...
The results are different. In first case, when call a
‘s getFirstElem()
function, its constructor is not even called. Please pay attention to it!