当前位置: 首页 > news >正文

阿里巴巴跟建设网站的区别wordpress同步

阿里巴巴跟建设网站的区别,wordpress同步,一个空间放2个网站,网站编辑的岗位职责背景#xff1a;项目中需要某个类不能被拷贝构造和赋值构造#xff0c;下面举例说明该场景#xff1a; 什么时候需要不可拷贝类 考虑一种情况#xff0c;我们要实现一个含有动态数组成员的类#xff0c;其中动态数组成员在构造函数中 new 出来#xff0c;在析构函数中 …背景项目中需要某个类不能被拷贝构造和赋值构造下面举例说明该场景 什么时候需要不可拷贝类 考虑一种情况我们要实现一个含有动态数组成员的类其中动态数组成员在构造函数中 new 出来在析构函数中 delete 掉。比如说这样一个矩阵类 templatetypename _T class Matrix { public:int w;int h;_T* data;// 构造函数Matrix(int _w, int _h): w(_w), h(_h){data new _T[w*h];}// 析构函数~Matrix() {delete [] data;} }上面的测试 1 中我们先构造了 m1 和 m2 两个 Matrix 实例这意味着他们各自开辟了一块动态内存来存储矩阵数据。然后我们使用 将 m2 拷贝给 m1这时候 m1 的每个成员whdata都被各自使用 运算符拷贝为和 m2 相同的值。m1.data 是个指针所以就和 m2.data 指向了同一块的内存。于是这里就会出现两个问题其一 发生拷贝前 m1.data 指向的动态内存区在拷贝后不再拥有指向它的有效指针无法被释放于是发生了内存泄露其二在 copy() 结束后m1 和 m2 被销毁各自调用析构函数由于他们的 data 指向同一块内存于是发生了双重释放。 测试 2 中也有类似问题。当调用 copy(Matrix_T cpy) 时形参 cpy 拷贝自实参而 cpy 会在函数结束时销毁cpy.data 指向的内存被释放所以实参的矩阵数据也被销毁了——这显然是我们不愿意看见的。同样的在返回时ret 随着函数结束而销毁返回值因为拷贝自 ret所以其矩阵数据也被销毁了。 因此对于像 Matrix 这样的类我们不希望这种拷贝发生。一个解决办法是重载拷贝函数每次拷贝就开辟新的动态内存 Matrix_T operator (const Matrix_T cpy) {w cpy.w;h cpy.h;delete [] data;data new _T[w*h];memcpy(data, cpy.data, sizeof(_T)*w*h);return *this; }Matrix(const Matrix_T cpy):w(cpy.w), h(cpy.h) {data new _T[w*h];memcpy(data, cpy.data, sizeof(_T)*w*h); }这样做也有不好的地方。频繁开辟动态内存当数据量很大时比如图像处理对程序性能是有影响的。在接口设计的角度考虑应该把这种拷贝操作以较明显的形式提供给用户比如禁用等号拷贝以直接的函数代替 操作 void copyFrom(const Matrix_T cpy) {w cpy.w;h cpy.h;delete [] data;data new _T[w*h];memcpy(data, cpy.data, sizeof(_T)*w*h); 再禁用构造拷贝只允许用户以引用传递的办法在自定义函数中使用 Matrix 类。 那么如何禁止拷贝操作呢 实现不可拷贝类 使用 boost::noncopyable Boost 作为 C 万金油工具箱在 boost/noncopyable.hpp 下提供了不可拷贝类的实现使用起来也非常简单让自己的类继承自 boost::noncopyable 即可 class Matrix : boost::noncopyable {// 类实现 }声明拷贝函数为私有 如果不想用第三方库自己实现呢不妨先看一下 Boost 是怎么做的 private: // emphasize the following members are privatenoncopyable( const noncopyable );noncopyable operator( const noncopyable );嗯****直接把拷贝函数声明为私有****的不就等于禁用了么so smart于是 templatetypename _T class Matrix { private:Matrix(const Matrix_T);Matrix_T operator (const Matrix_T); }C 11 下使用 delete 关键字 C 11 中为不可拷贝类提供了更简单的实现方法使用 delete 关键字即可 template class Matrix { public: Matrix(const Matrix_T) *delete*; Matrix_T operator (const Matrix_T) *delete*; } 关于类似 Matrix 矩阵类的实现更高级的做法是像智能指针一样封装其内部数据用内部计数器来确定动态分配的成员是否要释放掉不过这是另外一个问题了。 boost::noncopyable比较简单, 主要用于单例的情况. **通常情况下, 要写一个单例类就要在类的声明把它们的构造函数, 赋值函数, 析构函数, 复制构造函数隐藏到private或者protected之中, 每个类都这么做麻烦**.​ 有noncopyable类, 只要让单例类直接继承noncopyable. ​ class noncopyable的基本思想是把构造函数和析构函数设置protected权限这样子类可以调用但是外面的类不能调用那么当子类需要定义构造函数的时候不至于通不过编译。但是最关键的是****noncopyable把复制构造函数和复制赋值函数做成了private****这就意味着除非子类定义自己的copy构造和赋值函数否则在子类没有定义的情况下外面的调用者是不能够通过赋值和copy构造等手段来产生一个新的子类对象的。 private: // emphasize the following members are private noncopyable( const noncopyable ); const noncopyable operator( const noncopyable ); #ifndef BOOST_NONCOPYABLE_HPP_INCLUDED #define BOOST_NONCOPYABLE_HPP_INCLUDEDnamespace boost {// Private copy constructor and copy assignment ensure classes derived from // class noncopyable cannot be copied.// Contributed by Dave Abrahamsnamespace noncopyable_ // protection from unintended ADL {class noncopyable{protected:noncopyable() {}~noncopyable() {}private: // emphasize the following members are privatenoncopyable( const noncopyable );const noncopyable operator( const noncopyable );}; }typedef noncopyable_::noncopyable noncopyable;} // namespace boost#endif // BOOST_NONCOPYABLE_HPP_INCLUDED#include tfun.hclass myclass: public boost::noncopyable { public:myclass(){};myclass(int i){}; };int main() {myclass cl1();myclass cl2(1);// myclass cl3(cl1); // error// myclass cl4(cl2); // errorreturn 0; }
http://wiki.neutronadmin.com/news/259801/

相关文章:

  • 嘉兴 做企业网站中学生做网站的软件
  • 昆明凡科建站公司邢台建设网站公司
  • 北京城乡建设网站免费商城源码
  • 网络建站步骤专业建网站服务
  • 免费装潢设计网站flash源码模版php生成html免费下载做网站好还是阿里巴巴
  • 网站建设规划书 简版湛江快速网站建设在哪里做
  • 做网站哪种语言好ps做网站分辨率自适应
  • 网站建设全教程住房和城乡建设部网站执业资格注册中心
  • 度假村网站建设施工企业生产副总经理年终总结
  • seo引擎搜索网站关键词centos wordpress 2m
  • 做网站的可以信吗做盗版频网站
  • 建设银行网站招聘官网做wps的网站赚钱
  • 制作自己的网站多少钱西乡做网站价格
  • 百度收录网站但首页快照不更新成全视频免费观看在线看电视
  • 商城网站可以不备案吗免费发布信息网站平台
  • 如何用手机建设网站网站单页
  • 佛山网站网络设计总结
  • 个人怎么做微信公众号和微网站深圳网站建设费用大概
  • 烟台高端网站建设公司2345浏览器网址
  • 电脑网站怎么做网站备案ip地址段
  • 购物网站开发英文文献成全视频免费观看在线看128集
  • 赣榆做网站制作服务网站
  • 中小企业网站建设教程怎么给公司做推广
  • 网站制作com中国做的手机系统下载网站
  • 无锡网站策划台州网站制作定制
  • asp 做网站的缺点微信防红短链接生成
  • 做网站用的军事图片哪位大神推荐一下好网站
  • 临安规划建设局网站医疗器械四大龙头企业
  • C 如何做简易网站佛山本科网站建设
  • 合肥网站建设市场分析园林景观设计公司设计理念