如果我有一个类模板并且我使用一个智能指针指向一个动态分配的专门实例的实例,这会导致整个类模板由编译器定义还是它也会等待一个成员函数被调用从指针实例化之前?
template <class T>
class Test {
public:
void nothing();
void operation();
static const int value;
};
template <class T>
const int Test<T>::value = 100;
template <class T>
void Test<T>::nothing() {
/* invalid code */
int n = 2.5f;
}
template <class T>
void Test<T>::operation() {
double x = 2.5 * value;
}
int main() {
std::unique_ptr<Test<int>> ptr = new Test<int>(); // mark1
ptr->operation(); // mark2
return 0;
}
是否在 mark1 处实例化了整个类模板?
如果不是,是否意味着此代码将正确编译并且成员函数 Test::nothing() 不会被实例化?
Does the entire class template get instantiated at mark1?
是的。类模板是隐式实例化的——只有类模板,而不是它的所有成员。
If not does that mean this code will compile correctly and the member function Test::nothing() not be instantiated?
not 并不意味着,如果没有使用 nothing()
,它就不会被实例化。
我是一名优秀的程序员,十分优秀!