标签:必须 分类 bool 建立 自己的 char des return 不能
函数指针:是一个指针,它指向一个函数的入口地址。
int print(){ return 1; }
int main(){
int (*f1)() = print;
int (*f2)() = &print;
f1();
(*f1)();
return 0;
}
指针函数:是一个函数,它返回一个指针。
int* print(){ int a = 1;return &a; }
特化:使用模板有时会用到某些特殊类型需要特殊处理,那么就要特化出一个模板。模板特化中,template<>中不用写类型,特化函数的参数列表中的类型使用特化类型。
全特化:有一个主模板,所有类型全部被明确化。
偏特化:有一个主模板,只有部分类型被明确化,其余的靠主模板实例化。
template<typename T, typename U> //主模板
bool isEqual(T &a, U &b){
return sizeof(a) == sizeof(b);
}
template<> //全特化
bool isEqual(char* &a, char* &b){
return strncmp(a, b, sizeof(a)) == 0;
}
template<> //偏特化
bool isEqual(string &a, U &b){
return sizeof(a) == sizeof(b);
}
静态建立对象:由编译器为对象在栈中分配内存。使用方法为,直接调用构造函数。
动态建立对象:使用new在堆中分配对象。
只在堆中:
不要直接将构造函数设为private,这样new的时候不能调用构造函数了。编译器在为对象分配栈空间时,会先查看析构函数访问性,如果是私有的就不会在栈上分配。所以把析构函数设为private。
class A{
public:
A(){}
static A* construct(){
return new A();
}
void destroy(){
delete this;
}
private:
~A(){}
};
只在栈中:
不使用new即可,重载operator new,设为private访问。
class A{
public:
A(){}
~A(){}
private:
void* operator new(size_t t){}
void operator delete(void* ptr){}
};
C++必须使用【初始化列表】初始化数据成员的三种情况
c++中模板的特化
《More Effective C++》条款27:如何让类对象只在栈(堆)上分配空间?
标签:必须 分类 bool 建立 自己的 char des return 不能
原文地址:https://www.cnblogs.com/KirinSB/p/12912612.html