标签:
上面的代码中,并没有显示的使用类似于
void f(std::pair<int, const char*>);
void g(std::pair<const int, std:: string>);
……
void foo()
{
f(std::make_pair(42, "hello"));
g(std::make_pair(42, "hello"));
}
f(std::make_pair<int, const char*>(42, "hello"))
这样繁杂的写法,即使make_pair的两个值不完全符合要求,在template的帮助下也能顺利工作。
std::auto_ptr<ClassA> ptr1(new ClassA); //OK
std::auto_ptr<ClassA> ptr2 = new ClassA; //ERROR
在上面代码的最后一句中,拷贝构造函数在拷贝的同时将对象的所有权从ptr1转移到ptr2。此后ptr2拥有这个new出来的对象,而ptr1不再拥有,这样对象只会被delete一次——在ptr2被销毁的时候。赋值的动作也类似。
//通过一个对象初始化auto_ptr
auto_ptr<ClassA> ptr1( new ClassA);
//拷贝函数
//将所有权(归属,ownership)从ptr1转移到ptr2
auto_ptr<ClassA> ptr2(ptr1);
Chapt.4 Utilities——auto_ptr & pair
标签:
原文地址:http://www.cnblogs.com/levihsia/p/4515258.html