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模板类的定义中...
程序执行时p->f()和p.operator->()->f()的结果一样,看了auto_ptr模板类的实现,发现其中对->操作符的定义如下: _Tp* operator->() const __STL_NOTHROW { return _M_ptr; } 不理解的是p->f()这个调用是如何做到的?难道在调用时做了p到p.opertaor->()的隐式转换?但在auto_ptr模板类的定义中...
第一个是作为穷人的boost::scoped_ptr。这是为了管理类中指针的单个实例,该类管理指针的生命周期。在...
老师我在网上了解到auto_ptr是不能指向数组的,因为他在析构的时候调用的是delete,而数组调用的是delete[],在咱们课上的那个指向string数组中,然后在数组中再对每个变量都单独用auto_ptr指向,这样是保证最后可以delete每个变量,从而实现delete[]的功能,老师我理解的是这样的,有没有错,或者有没有需要补充的呀,谢谢...
auto_ptr<int> ap是局部变量,函数返回时会析构,它的析构函数会delete 包装的指针。 所以你的auto_ptr缺少引用计数。 或者返回之前调用ap.Release
p = a.p;这句有错误,p是a的私有成员,不能直接访问,凡是这样赋值的都有问题 避免这样做只能提供成员函数来解决,不然将p设为public,成员函数直接参见<memory>下auto_ptr的实现 a.p==NULL;这句应该是a.p=NULL;赋值
1.为了让auto_ptr<Derived>可以转换成auto_ptr<Base>;2.没有通用解决方案;3.既然是new出来的就...
const auto_ptr<int> p( new int(42) ) ; // 换成 int* p问题就清晰多了 p → 42 const auto_ptr<int> q(new int(20) ); // 换成int* q q → 20 const auto_ptr<int> r ;r → ???r = *p // r没分配内存, 引用未分配内存造成run-time error q = *p // okay. q...