`
javayestome
  • 浏览: 1030873 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

pimpl思想(还有疑问)

阅读更多
主要做的是封装,客户代码无法看到类的内部的具体实现。做到异常安全,可以使用stl的autoptr,也可以使用boost的,boost的更好,会要求定义~pimpl_sample(),至于为何要这样做,还不清楚。。。。
另外,《超越c++stl》一书说struct impl;要放在类定义里,我觉得反而不好,所以没有放,因为那样类会变大,而其实我们需要的只是一个声明而已。不知是否是这样。。。。。。

.h文件
#ifndef PIMPL_SAMPLE_H
#define PIMPL_SAMPLE_H

#include"boost/scoped_ptr.hpp"

struct impl;
class pimpl_sample
{
boost::scoped_ptr<impl> pimpl_;
public:
pimpl_sample();
~pimpl_sample();
void do_job();
};
#endif


.cpp文件

#include"pimpl_sample.h"
#include<string>
#include<iostream>

struct impl
{
void do_job_()
{
std::cout<<"doing the job"<<std::endl;
}
std::string s_;
};

pimpl_sample::pimpl_sample()
:pimpl_(new impl)
{
std::cout<<"pimple_sample()"<<std::endl;
pimpl_->s_="this is the pimpl idom";
}


pimpl_sample::~pimpl_sample()
{
std::cout<<"~pimple_sample()"<<std::endl;
// delete impl;
}

void pimpl_sample::do_job()
{
pimpl_->do_job_();
}


分享到:
评论

相关推荐

    C++程序的设计机制2 Pimpl机制

    ### C++程序设计机制之Pimpl机制详解 #### 引言 在软件开发过程中,特别是对于大型项目而言,代码的可维护性和可扩展性是非常重要的考量因素。在C++编程中,一种有效的策略就是减少不必要的代码重编译次数,以此...

    pimpl演示程序

    在C++编程中,"Pimpl"(Pointer to Implementation,实现指针)是一种设计模式,它的主要目的是为了实现编译时的二进制兼容性、提高编译速度以及隐藏类的内部实现细节。Pimpl模式通常用于库的开发,使得头文件只包含...

    c++ PImpl实现机制

    **PIMPL** ,即Private Implementation,一般称之为类的私有化实现,PImpl主要有两个作用; (1)它让声明和实现进行解耦,在项目开发时,如果很多文件引用了该头文件,如果头文件改变了一些实现,那么在编译时,...

    pimpl_sample.rar_pimpl

    Pimpl模式的基本思想是将类的实现细节封装在一个单独的结构或类中,这个类通常被称为"Impl"类,而原始类只公开一个指向"Impl"类的指针。这样做的好处有以下几点: 1. **编译期隔离**:由于类的接口和实现分离,修改...

    pimpl-idiom.rar_pimpl_site:www.pudn.com

    这种技术的核心思想是在类的公共接口中只声明一个指向私有实现类的指针,从而隐藏内部数据结构的细节,降低编译依赖性,并提供更好的封装。 ### 1. 编译时间优化 当一个类的内部结构发生改变时,所有依赖这个类的...

    Book_pImpl.zip

    Pimpl惯用法的基本思想是将类的私有数据成员(即实现部分)封装在一个单独的内部类(Impl类)中,然后在主类中仅保留一个指向Impl类的指针。这样做的好处在于: 1. **编译时隔离**:当修改类的实现细节时,只有Impl...

    C++学习笔记之pimpl用法详解

    C++中的pImpl(Pointer to Implementor)是一种设计模式,用于隔离类的接口与实现,以提高代码的可维护性和编译效率。这种模式的主要目的是信息隐蔽、加速编译、保持二进制兼容性以及支持惰性分配。 1. 信息隐蔽: ...

    cmake 、代理模式与pimpl模式混用实例、std::move、std::forward()应用

    `代理模式`和`pimpl模式`是两种重要的设计模式,它们有助于提高代码的灵活性和封装性。`std::move`和`std::forward`是C++11引入的高效资源管理工具,用于提升性能,特别是处理移动语义和转发引用。现在,我们将详细...

    Exceptional C++中文版

    - Pimpl惯用法的优点:降低编译时间、保护私有成员不受外部更改的影响。 #### 五、名字查找、名字空间和接口规则 这部分内容涵盖了名字查找机制、名字空间的使用以及接口设计的最佳实践。 1. **名字查找机制**:...

    pimple的例子代码,仅供参考

    在C++编程中,"Pimpl idiom"(也称为Pointer to Implementation或Private Implementation)是一种设计模式,用于提高代码的编译时间和隔离类接口的实现细节。标题中的“pimple的例子代码”指的是一个展示了如何使用...

    减少文件之间的编译依赖

    **概念解释:** PImpl(Private Implementation 或 Pointer to Implementation)是一种设计模式,用于隐藏类的实现细节,减轻编译负担。它通过将类的实现细节封装在一个独立的类中,并通过一个指向这个实现类的指针...

    WebKit中两个小设计(以小见大)

    这种技术的核心思想是通过一个隐藏实现的指针,来分隔接口与实现,以便在不影响接口的情况下修改内部实现。Opaque Pointer的好处包括隐藏具体实现细节、添加新的数据成员时不影响兼容性,以及减少包含头文件的数量,...

    QT_namespace_UI的理解

    `pImpl`(Pointer to Implementation)或称为`Impl Pointer`、`Pimpl Idiom`,是一种C++的设计模式,它的主要目标是解耦接口(头文件)和实现(源文件),以减少编译依赖并提高编译效率。在QT的UI中,`pImpl`原则也...

    C++服务器开发精髓笔记

    本笔记涵盖了C++服务器开发的精髓知识点,从RAII到Pimpl、C++11新特性、统一的类成员初始化语法、std::initializer_list、C++17注解标签等多方面内容。 1. RAII(Resource Acquisition Is Initialization) RAII是...

    exceptional c++:47个c++工程难题、编程问题和解决方案(英文版)

    《exceptional c++:47个c++工程难题、编程问题和解决方案(中文版)》讲述如何用标准c++进行企业级的软件开发,通过“问题/解答”的方式,启发读者思考,帮助了解隐藏在问题背后的设计思想,以及各种编程指导原则适用...

    类为什么放在头文件里不行

    6. **PIMPL(Pointer to Implementation)**:为了进一步减少头文件中的依赖,可以使用PIMPL(Private Implementation)或Opaque Pointer技巧。类的私有数据成员仅以指针形式存在,而实际的数据结构定义在源文件中,...

    qt d指针和q指针的例子demo

    在Qt框架中,`Q_D()`和`Q_PTR()`宏是用于实现PIMPL(Private Implementation)设计模式的关键工具,这种模式也被称为“Qt的d指针”或“Q对象指针”。PIMPL模式是一种常见面向对象编程的设计模式,其目的是隐藏类的...

    [计算机科学经典著作].Addison.Wesley.-.Exceptional.C

    4. **编译器防火墙与Pimpl idiom**:学习使用Pimpl idiom来隔离实现细节,防止编译依赖并提高代码的封装性。 5. **名称查找、命名空间与接口原则**:了解C++中的名称查找规则,如何有效地使用命名空间,并遵循接口...

Global site tag (gtag.js) - Google Analytics