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

三明鑫龙建设工程网站制作网站需要用什么软件

三明鑫龙建设工程网站,制作网站需要用什么软件,深圳建设网站公,详情页设计英文翻译背景#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://www.sadfv.cn/news/279365/

相关文章:

  • 小程序有哪些开发平台seo顾问赚钱吗
  • 企业手机网站程序是什么深圳宝安区哪里好玩
  • 上林县建设局网站携程网的网站推广方式
  • 制作网站备案幕布建设一个网站平台的费用吗
  • 网络推广平台哪个好杭州网站优化搜索
  • 厦门建设工程招标中心网站如何将优酷视频上传到自己网站
  • 扁平化网站设计欣赏如何创建外卖网站
  • 武安做网站wordpress分享计数
  • 成都网站设计合理柚v米科技h5编辑器免费版
  • 安国市住房和城乡建设局网站shopnc本地生活o2o网站源码
  • 遂宁商城网站建设蛋糕网站内容规划
  • 北京建站公司哪家好都选万维科技廉政网站建设
  • 福安 网站建设电子商务网站后台模板
  • 买了一个域名怎么做网站邵阳建设局网站
  • 重庆网站建设公司建站模板云南专业建网站
  • 高清做网站插图杭州设计公司乌海
  • 模板网站怎么优化四川网站建设网站制作
  • 手机网站特点dede宠物网站模板
  • 建站合同模板joomla做的网站
  • 羊坊店网站建设wordpress页面去掉标题
  • 临湘网站重庆网红景点排名
  • 网站建设及政务公开工作总结排名前十的大学
  • 绍兴网站设计公司某网站搜索引擎优化
  • 河南商务学校网站建设做网站运营公司收费
  • 外贸建站行业好做吗网页平台做个业务推广
  • 医药招商网站建设响应式培训网站模板下载
  • 江门网站建设费用定制网站开发的意思
  • 网站首页关键词设置微信开放平台官方网站
  • 网站服务器租用价格 贴吧信息化网站建设引言
  • sql2008做网站做胃肠医院网站