More Effctive C++ Item19 (Understand the origin of temporary objects)
2007-09-05 23:12
423 查看
临时对象会在两种情况发生:
1 调用函数发生隐式类型转换
size_t countChar(const string& str, char ch);
char buffer[MAX_STRING_LEN];
char c;
// read in a char and a string; use setw to avoid
// overflowing buffer when reading the string
cin >> c >> setw(MAX_STRING_LEN) >> buffer;
cout << "There are " << countChar(buffer, c)
<< " occurrences of the character " << c
<< " in " << buffer << endl;
为了消除const char*(buffer的类型)和 const string&(str的类型)之间的差别,需要创建一个临时的string类型的对象
void uppercasify(string& str);
2 函数返回对象时
函数的返回值即是一个临时对象。
对于大多数函数,没有办法在概念上避免临时对象的构造函数和析构函数的调用,但通过现实中
一些优化方法可以解决这类问题。
具体的优化方法在下一章介绍。
1 调用函数发生隐式类型转换
size_t countChar(const string& str, char ch);
char buffer[MAX_STRING_LEN];
char c;
// read in a char and a string; use setw to avoid
// overflowing buffer when reading the string
cin >> c >> setw(MAX_STRING_LEN) >> buffer;
cout << "There are " << countChar(buffer, c)
<< " occurrences of the character " << c
<< " in " << buffer << endl;
为了消除const char*(buffer的类型)和 const string&(str的类型)之间的差别,需要创建一个临时的string类型的对象
void uppercasify(string& str);
char subtleBookPlug[] = "Effective C++"; uppercasify(subtleBookPlug); // error!
为什么函数调用失败呢?因为无法创建一个临时的string对象。
假设这里允许创建一个临时的string对象,str发生改变时,临时对象发生改变,
但字符串subtleBookPlug没有按照编程者意图发生改变。
但用const string& 就不会出现这个问题。
2 函数返回对象时
const Number operator+(const Number& lhs, const Number& rhs);
函数的返回值即是一个临时对象。
对于大多数函数,没有办法在概念上避免临时对象的构造函数和析构函数的调用,但通过现实中
一些优化方法可以解决这类问题。
具体的优化方法在下一章介绍。
相关文章推荐
- The Standard Librarian: I/O and Function Objects: Containers of Pointers
- Effective C# 10:Understand the Pitfalls of GetHashCode()
- Understand the Impact of Change
- Understand the boot-up procedure of Linux in Depth
- Effective C# Item 10: Understand the Pitfalls of GetHashCode()
- the understand of SOA and Web Services
- 访问字符串对象的内容(Accessing the Content of String Objects)CFString
- Setting the Scope of COM Objects in ASP Pages
- Create views of OpenCASCADE objects in the Debugger
- The Core Objects of Your App
- 解决办法:error=Too many objects of the specified type (PJ_ETOOMANY)
- How to Shrink the Datafile of Temporary Tablespace
- Microservices and the First Law of Distributed Objects
- 终极方法,pjsip发起多方对讲出错Too many objects of the specified type (PJ_ETOOMANY)
- Item 7: Understand the Pitfalls of GetHashCode()(Effective C#)
- [Efficient Retrieval of the Topk Most Relevant Spatial Web Objects]浅析(一)
- 102 For which two database objects can the VERSIONS clause of the Flashback Versions Query be used?
- The origin of "Hungarian" notation for naming variables
- count the number of objects--物体计数
- The method below converts an array of objects to a DataTable object in C#.