重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本篇内容主要讲解“怎样创建Visual C++项目”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎样创建Visual C++项目”吧!
创新互联是一家集网站建设,卫滨企业网站建设,卫滨品牌网站建设,网站定制,卫滨网站建设报价,网络营销,网络优化,卫滨网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
它将指针包装成了类,并且重载了反引用(dereference)运算符operator *和成员选择运算符operator ->,以模仿指针的行为
例如以下Visual C++代码,
#include < cstring > #include < memory > #include < iostream > class string { public: string(const char* cstr) { _data=new char [ strlen(cstr)+1 ]; strcpy(_data, cstr); } ~string() { delete [] _data; } const char* c_str() const { return _data; } private: char* _data; }; void foo() {
由于str是函数的局部对象,因此在函数退出点生存期结束,此时auto_ptr
auto_ptr < string > str1( new string( < str1 > ) ); cout << str1->c_str(); auto_ptr < string > str2(str1); // str1内部指针不再指向原来的对象 cout << str2->c_str(); cout << str1->c_str(); // 未定义,str1内部指针不再有效
现在我们拥有了最简单的废料收集机制(我隐瞒了一点,在string中,你仍然需要自己编码控制对象的动态创建和销毁,但是这种情况下的准则极其简单,就是在构造函数中分配资源,在析构函数中释放资源,就好像飞机驾驶员必须在起飞后和降落前检查起落架一样。),即使在foo函数中发生了异常,str的生存期也会结束,C++保证自然退出时发生的一切在异常发生时一样会有效。
auto_ptr<>只是智能指针的一种,它的复制行为提供了所有权转移的语义,即智能指针在复制时将对内部维护的实际指针的所有权进行了转移,例如:
template < typename T > class shared_ptr { private: class implement // 实现类,引用计数 { public: implement(T* pp):p(pp),refs(1){} ~implement(){delete p;} T* p; // 实际指针 size_t refs; // 引用计数 }; implement* _impl; public: explicit shared_ptr(T* p) : _impl(new implement(p)){} ~shared_ptr() { decrease(); // 计数递减 } shared_ptr(const shared_ptr& rhs) : _impl(rhs._impl) { increase(); // 计数递增 }
某些时候,需要共享同一个对象,此时auto_ptr就不敷使用,由于某些历史的原因,Visual C++的标准库中并没有提供其他形式的智能指针,走投无路了吗?在main()函数中,先调用foo1(val),函数中使用了一个局部对象temp,它和val共享同一份数据,并修改了实际值。
函数返回后,val拥有的值同样也发生了变化,而实际上val本身并没有修改过。然后调用了foo2(val),函数中使用了一个无名的临时对象创建了一个新值,使用赋值表达式修改了val,同时val和临时对象拥有同一个值,函数返回时,val仍然拥有这正确的值。
到此,相信大家对“怎样创建Visual C++项目”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!