the leak of the memory in c++ 03
来源:互联网 发布:软件实施工程师招聘 编辑:程序博客网 时间:2024/06/05 02:06
The Leak of the Memory in C++
In this chaper I will introduce a new smart pointer which is scoped_ptr;
It likes auto_ptr but better. When peopel use auto_ptr, sometimes they forget
that auto_ptr alread is empty, like this;
In above situation, p1 is empty pointer after it gives pointee to p2. It
will produce some error.
But scoped_ptr can't give pointee to any pointer, so it will be better and
safer in some cases.
Now I'll introduce some special pattern to you, I say special, because in
normal cases, it just used in C++; In articles which I wrote before, I avoided
to use operator of delete, but I still use new operator, in this article I'll
introduce method which can help us to avoid use new operator.
Now let us welcome our pattern: PIMPL, it means Pointer to Implement. It
looks like below.
PersonImpl.h
Person.h
main.cpp
In above code, I did not implement Person directly, instead of a smart
pointer which point a class which implement Person. So we can use class Person
just like I use it in main function without new neither delete operators.
In this chaper I will introduce a new smart pointer which is scoped_ptr;
It likes auto_ptr but better. When peopel use auto_ptr, sometimes they forget
that auto_ptr alread is empty, like this;
auto_ptr<Person> p1(new Person); auto_ptr<Person> p2 = p1; cout << p1->name() << endl;
In above situation, p1 is empty pointer after it gives pointee to p2. It
will produce some error.
But scoped_ptr can't give pointee to any pointer, so it will be better and
safer in some cases.
Now I'll introduce some special pattern to you, I say special, because in
normal cases, it just used in C++; In articles which I wrote before, I avoided
to use operator of delete, but I still use new operator, in this article I'll
introduce method which can help us to avoid use new operator.
Now let us welcome our pattern: PIMPL, it means Pointer to Implement. It
looks like below.
PersonImpl.h
class PersonImpl{public: PersonImpl() { cout << "I'm constructed" << endl; } ~PersonImpl() { cout << "I'm destructed!" << endl; }private: int age_; string name_;public: const string& getName()const { return name_; } void setName(const string& name) { name_ = name; } int getAge() { return age_; } void setAge(int age) { age_ = age; }};
Person.h
using namespace std;using namespace boost;class Person{public: Person() : personPtr_(new PersonImpl) {} ~Person() { };private: scoped_ptr<PersonImpl> personPtr_;public: int getAge() { return personPtr_->getAge(); } void setAge(int age) { personPtr_->setAge(age); } const string& getName()const { return personPtr_->getName(); } void setName(const string& name) { personPtr_->setName(name); }};
main.cpp
using namespace std;using namespace boost;int main(int,char**){ Person person; return 0;}
In above code, I did not implement Person directly, instead of a smart
pointer which point a class which implement Person. So we can use class Person
just like I use it in main function without new neither delete operators.
0 0
- the leak of the memory in c++ 03
- The Leak of The Memory In C++ 1.1
- The Leak of The Memory in C++ 1.2
- The problem of Memory Leak
- In the name of memory
- The mechanism and implementation of detecting memory leak
- The tools that check memory leak of python program
- What is the best free memory leak detector for a C/C++ program and its plug-in DLLs
- What is the best free memory leak detector for a C/C++ program and its plug-in DLLs
- Find the memory usage, footprint, leak
- Memory management in C: The heap and the stack
- Allocationand Reuse of Memory in the Shared Pool
- memory leak in occi
- Memory leak in WebView
- The understanding of string in C.
- The use of sizeof in C
- The summary of virtual memory
- the memory of php study
- ZOJ 3329 One Person Game(期望)
- Rtems的体系结构
- VBA简单认识
- checkio -- Striped Words
- 做好自己,面对现实(二)
- the leak of the memory in c++ 03
- Spring MVC 解决静态资源的问题
- HOOK登陆器来注入DLL -HOOK CreateProcessA
- atl offsetofclass
- Linux运维第1天:Linux操作系统基础
- hadoop
- checkio的一些题:Speech Module,Feed Pigeons,Roman numerals,Golden Pyramid,The Most Numbers,Digits Multipl
- ios图像处理
- 【Python】super的用法