别人的帖子(关于容器管理很多类),我没看懂,

时间:2022-01-25 04:23:10
原帖子: http://topic.csdn.net/u/20120125/22/e79a09f8-54a7-45d3-bead-1ba9b7cdf1f4.html


是关于一个容器管理很多类的问题。。。。。


primer中提到用智能指针来解决, 容器存放智能指针。。




于是我写了一个简单的智能指针类

不知道如何完善下去了。。。。



Base是基类,Derived是继承类,MySmartPtr是智能指针类


如何给MySmartPtr中的指针成员进行分配内存啊??


代码如下:

class Base
{

//构造和析构
public:
Base():data(0){}
~Base(){}

//interface member  funciton 
public:
void Print() const
{
cout<<data;
}
//data
private:
int data;

//other member  funciton 
public:
//返回该对象的副本
virtual Base* clone() const
{
return new Base(*this);
}

};


class Derived:public Base
{
public:
//返回该对象的副本
 Derived* clone() const
{
return new Derived(*this);
}

};



//智能指针类
class MySmartPtr
{
private:
Base* p;
size_t * use;
private:
void decr_use()
{
if ( (-- *use)==0 )
{
delete p;
delete use;
}
}

public:
MySmartPtr():p(NULL),use(new size_t(1)){}
~MySmartPtr()
{
decr_use();
}

const Base* operator->() const throw (logic_error)
{
if(p)
return p;
else
throw logic_error(string("空指针"));
}

};

 1.  MySmartPtr提供的借口 -> ,是获得其成员指针, 首先得保证p已经指向一块内存,才能使用, 要指向内存,需要分配内存啊,,

怎么给成员p分配内存。。。。。。。

2.   用容器管理 很多类,  智能指针类,真的可行吗???  



8 个解决方案

#1


1.
    p = new Base();

2. 
    没用过, 无法断言

#2


不能直接这样分配内存

MySmartPtr已经把那个指针设置为私有,


使用里面的那个指针,只能通过->运算符

使用运算符之前,又必须分配内存

我矛盾了




引用 1 楼 rrrfff 的回复:
1.
  p = new Base();

2. 
  没用过, 无法断言

#3


木有人啊

#4


1 智能指针类中只保存 要维护资源的 句柄。
所以p一般通过构造函数或其他成员函数,来设置p的值。
参考c++iso2003 auto_ptr类的源码

#5


2 可以 有很多现场智能指针可以使用 如:unique_ptr

#6


多谢, 我觉得从 构造函数中穿进去较为合适一些,





引用 4 楼 demon__hunter 的回复:
1 智能指针类中只保存 要维护资源的 句柄。
所以p一般通过构造函数或其他成员函数,来设置p的值。
参考c++iso2003 auto_ptr类的源码

#7


私有对象赋值那就自身调用呗~只要是成员函数或者友元都可以~智能指针一般使用构造函数然后再析构里面释放掉~
至于第二个问题~标准库函数已经解决的差不多了~

#8


不要自己写智能指针,用std::unique_ptr。

#1


1.
    p = new Base();

2. 
    没用过, 无法断言

#2


不能直接这样分配内存

MySmartPtr已经把那个指针设置为私有,


使用里面的那个指针,只能通过->运算符

使用运算符之前,又必须分配内存

我矛盾了




引用 1 楼 rrrfff 的回复:
1.
  p = new Base();

2. 
  没用过, 无法断言

#3


木有人啊

#4


1 智能指针类中只保存 要维护资源的 句柄。
所以p一般通过构造函数或其他成员函数,来设置p的值。
参考c++iso2003 auto_ptr类的源码

#5


2 可以 有很多现场智能指针可以使用 如:unique_ptr

#6


多谢, 我觉得从 构造函数中穿进去较为合适一些,





引用 4 楼 demon__hunter 的回复:
1 智能指针类中只保存 要维护资源的 句柄。
所以p一般通过构造函数或其他成员函数,来设置p的值。
参考c++iso2003 auto_ptr类的源码

#7


私有对象赋值那就自身调用呗~只要是成员函数或者友元都可以~智能指针一般使用构造函数然后再析构里面释放掉~
至于第二个问题~标准库函数已经解决的差不多了~

#8


不要自己写智能指针,用std::unique_ptr。