auto_ptr<Date> ap(new Date); auto_ptr<Date> copy(ap); // auto_ptr的问题:当对象拷贝或者赋值后,前面的对象就悬空了 // C++98中设计的auto_ptr问题是非常明显的,所以实际中很多公司明确规定了不能使用auto_ptr ap->_year = 2018; return 0; } 关于上面的问题,为什么会出现悬空,来看看源码 //auto...
unique_ptr (constunique_ptr&) =delete; 可以看到,拷贝操作直接被禁掉了。 在应用方面,auto_ptr由于奇怪的拷贝语义,导致在容器中使用的话很容易出错,比如下面的代码: vector<auto_ptr<int>>foo; ... auto item= foo[0]; 容器中的元素不知不觉就被改掉了(置为null)。 如果是unique_ptr,就看得很清楚了...
程序执行时p->f()和p.operator->()->f()的结果一样,看了auto_ptr模板类的实现,发现其中对->操作符的定义如下: _Tp* operator->() const __STL_NOTHROW { return _M_ptr; } 不理解的是p->f()这个调用是如何做到的?难道在调用时做了p到p.opertaor->()的隐式转换?但在auto_ptr模板类的定义中...
在GCC上报错,无法找到操作数类型分别是auto_ptr<>和const auto_ptr<>的operator=。顺便,不建议再使用auto_ptr。建议使用std::shared_ptr/unique_ptr(C++11)或者boost::shared_ptr/scoped_ptr。
智能指针的最主要的作用防止裸指针带来的很多问题,如指向无效内存的指针,或者可能出现的内存泄露。其实我不建议你看这个auto_ptr,因为在实际开发中,很少使用这个,而是使用boost库的shared_ptr,比auto_ptr更好用,更安全。如果你学会了shared_ptr,自然也会用auto_ptr了。并且vs2010里已经提供了与...
用auto_ptr解决内存泄露的问题 昨天看的《C++标准函数库》,看到auto_ptr这一节,说到了关于内存泄露的问题 而且有些情况以前根本没有考虑到,想想觉得好危险。 典型的情况就是如下的代码: voidfoo(){ int*p =newint[10]; //dosth. delete[] p;
可是我在第43页没有找到”不要用任何方式来传递auto_ptr”类似的语句啊。 而且里面讲的是source和sink,说的就是该如何传递auto_ptr和转移auto_ptr的ownership啊。 倒是在第44页中找到了这样的话: 第44页这段话的意思就是说:除非为了传递ownership,否则不要将auto_ptr作为一个参数。