C++ template的一些高级用法(元编码,可变参数,仿函数,using使用方法,. C++ 智能指针)(二)
? //采用枚举
35 ? ? enum { res = 1L };
36 };
37?
38?
39 int main(int argc, char * args[]) {
40?
41 ? ? time_t ?a ,b;
42 ? ? a = clock(); //开始记录时间
43 ? ? cout << data<45L>::res << endl;
44 ? ? b = clock(); //开始记录时间
45 ? ? system("echo 采用元编程所消耗的时间");
46 ? ? cout << (double)(b - a) / CLK_TCK<<"ms"<
47 ? ? a = clock();
48 ? ? cout << feibona(45L) << endl;
49 ? ? b = clock();
50 ? ? system("echo 采用普通的算法所消耗的时间");
51 ? ? cout << (double)(b - a) / CLK_TCK << "ms" << endl;
52 ? ? cin.get();
53 ? ? return 0;
54 }
?
?
?
5 ?C++智能指针 ,关于智能指针和普通指针,的几种行为的对比
?
?
?
?
?1 /*
?2 ?智能指针:
?3 ? ? 对于C++而言: ? ? ? ?std::auto_ptr ptr(new double);
?4 ? ? 对于C++11新的智能指针: ? ? ? ? std::unique_ptr ?ps(new double);
?5 ? ? 通过下面几组数据做些一点
?6 */
?7 #include
?8 #include
?9 #include
10 using ?namespace std;
11 /*模式一 分配内存地址,而不手动进行回收 */
12 void showp() {
13 ? ? system("echo 分配内存地址,而不手动进行回收");
14 ? ? for (int i = 0; i < 10000000; i++) {
15 ? ? ? ? ? double * p = new double; ? //不释放
16 ? ? }
17 ? ? cin.get();
18 }
19 /* 模式二,分配地址,并手动进行回收地址 */
20 void showp1() {
21 ? ? system("echo 分配地址,并手动进行回收地址");
22 ? ? for (int i = 0; i < 10000000; i++) {
23 ? ? ? ? double * p = new double; ? //不释放
24 ? ? ? ? delete p;
25 ? ? }
26 ? ? cin.get();
27?
28 }
29 /*模式三,分配地址,采用c++通用指针*/
30 void showp2() {
31 ? ? system("echo 分配地址,采用c++通用指针");
32?
33 ? ? for (int i = 0; i < 10000000; i++) {
34 ? ? ? ? double * p = new double; ? //不释放
35 ? ? ? ? auto_ptr ps(p); ? //采用智能指针,不会多释放地址,旧版本
vc98支持
36 ? ? }
37 ? ? cin.get();
38 }
39 /* 模式四,分配地址,采用C++11新型指针 */
40?
41 void showp3() {
42?
43 ? ? system("echo 分配地址,采用C++11新型指针");
44 ? ? for (int i = 0; i < 10000000; i++) {
45 ? ? ? ? auto_ptr ps(new double); ? //采用智能指针,C++11新特性
46 ? ? }
47 ? ? cin.get();
48 }
49?
50 int main(int argc , char * args []) {
51 ?
52 ? ? //auto_ptr
53 ? ?//函数指针
54 ? ? void(*p[])() = { showp,showp1,showp2,showp3 };
55 ? ? //for (auto data : p) {
56 ? ? // ? ?data();
57 ? ?//}
58 ? ? p[1]();
59 ? ? system("echo 按一下结束");
60 ? ? cin.get();
61 ? return 0;
62 }
?
?
? 使用智能指针的好处:
?
1 、 不会对一个分配的地址,释放两次。如果手动释放地址,存在着重复释放或者漏放的情况。 避免内存泄露。
?
? ?2. ?释放及时,不会捣鼓电脑中cpu换句话说,不会吃cpu。而是电脑运缓慢....
?
?
| 评论 |
|
|