关于类的成员变量指向在堆上的对象的选择:指针/auto_ptr<>/shared_ptr<> ?

在堆上的对象作为一个类的一个成员变量,我了解到的至少有三种方式(如下所示):

class A
{

}

class B
{
A* m_pA1;
auto_ptr m_pA2;
shared_ptr
m_pA3;

}

B::B()
:m_pA1(new A),m_pA2(auto_ptr(new A)),m_pA3(shared_ptr(new A))
{

}

针对这三种方案,在什么情况下选择哪种呢:下面是小弟的一些感悟,算是抛砖引玉
1、个人感觉和B的拷贝构造和赋值有关系,如果需要的是B的一个深拷贝,我会选择m_pA1;
2、auto_ptr的所有权剥夺性,使得他不适合拷贝构造和赋值;
3、shared_ptr
采用引用计数 觉得和m_pA1之间做选择还是有点纠结?
4、圆方,你怎么看?

c++

1个回答

一般使用就一
二淘汰了
三引用计数也狠多用,如果熟悉也可以

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
指向对象成员变量的指针。
1,工作定了后,把《Inside the C++ object model》又重新看了一遍,之前不太理解的差不多都看明白了,有空好好总结下发上来。 这个算是其中的一个点吧,之前根本没留意,所以特意写一篇记录下。 [code=&quot;c++&quot;] #include using namespace std; class A { public: A (int m = 0, int ...
指向对象成员变量的指针和指向成员函数的指针
1.指向对象成员变量的指针: 形式:  数据类型名 * 指针变量名 定义了一个指针,指向对象的成员变量    实例:                Stu.h                                                                                        Stu stu: int *p=&(stu.age);/
类,指向对象的指针,
/* this指针:     1、每一个类都包含一个指向本类对象的指针(this)    2、this指针指向本类对象的起始地址     3、当数据名与成员函数中的形参相同时常有this区分      eg: class time {        private:      int hour,minute,second;   public:    void ste_time
auto_ptr 指向同一个对象
#include rn#include rnclass CTestrnrnpublic:rn test()cout <<"test"< p(new CTest);rnrn std::auto_ptr pp(p); //pp p指向同一个,违背了一句话:不能超过两个auto_ptr指向提供一个对象rnrn //?rn p->test();rnrn cout << p.get()<pp(p); 调用构造函数, pp指向p所指向的 对象, rn
当shared_ptr指向“this”对象
     在学习boost.asio的时候遇到了enable_shared_from_this&amp;lt;&amp;gt;,它与shared_ptr指向“this”对象的情况有关,查阅资料后,我通过下面链接文章中的“special case”章节理解了它的作用。                       http://www.umich.edu/~eecs381/handouts/C++11_smart_p...
智能指针——auto_ptr与shared_ptr
auto_ptr       auto_ptr是当年C++标准库中提供的一种智能指针。auto_ptr在构造时获取某个对象的所有权,在析构时释放该对象。可以提高代码的安全性。例如:int *p = new int(0); auto_ptr&amp;lt;int&amp;gt; ap(p);     auto_ptr主要是解决被异常抛出时发生资源泄露问题。     注意:       1)auto_ptr析构的时候...
HEVC中类,对象和指向对象的指针
HEVC代码中定义了几十种类,这些类的对象一般只实例化一次,在编码过程中都是通过指针来访问实例化的对象。 唯一以类名实例化的对象:cTAppEncTopmain () { TAppEncTop cTAppEncTop; }这个对象被建立时,它的所有数据成员也被建立,并实例化(占据存储空间)class TAppEncTop { TEncTop m_cTEncTop }而m_cTEnc
对象和指向对象的指针
为什么对象不能多态,而指向对象的指针却可以?
关于c++指向对象的指针
[code=c]#includern#includernclass Petrnrn public:rn Pet(std::string thename);rn void FREE_TEST();rn void FOOK_TEST();rn void EAT_TEST();rn protected:rn std::string name;rn;rnclass dog:public Petrnrn public:rn dog(std::string thename);rn rn void CLIMB();rn;rnclass cat:public Petrnrn public:rn cat(std::string thename);rn rn void KIDDING_TEST();rn rn;rnPet::Pet(std::string thename)rnrn name = thename;rnrnvoid Pet::FREE_TEST()rnrn std::cout<CLIMB();rn //dogFREE_TEST();rn //dog.FOOK_TEST();rn //dog.EAT_TEST();rn rn //cat->KIDDING_TEST();rn //cat.FREE_TEST();rn //cat.EAT_TEST();rn //cat.FOOK_TEST();rn return 0;rn[/code]rn最后编译提示 dog和cat 不是一个type rn本人愚笨,还请各位大神指教
enable_shared_from_this,关于在类的内部获取该对象shared_ptr指针的问题
今天碰到一个bug,我在QT自定义控件类的内部做了获取该对象的shared_ptr指针,用了this指针,结果发现悲剧了,写了这行代码之后,设置样式表都无效了,就像下面这样:class MineButton { public: void on_MineButton_clicked(); } void on_MineButton_clicked() { ui-&amp;gt;MineBut...
关于指向类的指针的复制?
class Bookrnrn...rnrnclass Novel:public Bookrnrn...rnrnrnBook* pB = new Novel();rnBook* pN;rnrn如何将pB指向的类复制一份由pN指向。rnpN = pB 是指向同一个地址,而并没有重新复制一份。rn当然内存拷贝可以解决一部分问题,但类结构中若有指针元素的情况下将不正确。
auto_ptr类用指针初始化
[code=C/C++]#includernusing namespace std;rnrnint main()rnrn int *p=new int(32);rn auto_ptr(p);rn system("pause");rn return 0;rn;[/code]rnrn出现错误:error C2040: “p”: “std::auto_ptr<_Ty>”与“int *”的间接寻址级别不同rnrn不解。。rn
一个关于类的对象和指向类的指针区别?
打算在主窗口中创建一个按钮,在CMyDlg类当中定义CButton对象/指针,出现如下问题:rn1,在OnInitDialog()函数中采用如下代码:CButton btn;btn.Create()无法创建一个按钮,但是采用CButton* btn=new CButton;btn->Create()则可以创建。rn2,但如果在CMyDlg类声明当中定义public:CButton btn;在OnInitDialog()中btn.Create()则可以成功创建按钮。rn以上3中方法有什么区别,谢谢!
C++常用的智能指针auto_ptr、shared_ptr
利用’对象的析构函数一定会被调用’这一特性,在对象析构的时候delete资源。对于的机制是智能指针。目的是帮助自动释放资源。 常用的智能指针:STL的std::auto_ptr<>、TR1的std::tr1::shared_ptr<>std::auto_ptr<>auto_ptr<>在被销毁的时候(离开其scope时),将会==对其所指向对象调用delete==。 1. 不要令多个auto_ptr
auto_ptr、shared_ptr和unique_ptr的区别和应用场景
<p>rn <br />rn</p>rn<p style="font-family:&quot;color:#3D3D3D;font-size:16px;background-color:#FFFFFF;">rn 扫码进入学习群,领取学习资料+讲师答疑rn</p>rn<div>rn <br />rn</div>rn<img src="https://img-bss.csdn.net/201908080328096578.png" alt="" /> rn<p>rn <br />rn</p>rn<p>rn <br />rn</p>rn<p>rn 本教程是C++ Primer Plus 6th 、The C++ Programming Language_4th、Thinking in C++等国外顶级的C++著作的精华和个人超过10年的C++使用经验的完美结合。rn</p>
指针还是指针指向的对象???
看C语言深度解剖,自己验证的时候出现的问题,rn[code=C/C++]rn#include "stdio.h"rnrnvoid main(int argc,char** argv)rnrnrn int *p = (int *)0x12ff7c; //这个地址经过验证,可以访问rn *p = 0x1000;rn printf("p is : %x\n",p);rn rnrn[/code]rn输出的结果和我预想的不一样,想看看大家的方法
关于类的对象与指针?
关于类的对象与指针,还是不太明白rn如下例:rnrnCString strA("123");rnCString *strB = new CString("123");rnrnstrA与strB到底有什么区别,rn我在书上看到,说对于复杂类型变量,实际上也是指针,那么也就是说变量strA是指向对象strA的指针,变量strB也是指向对象strB的指针,也就是说,strA的值是strA对象的起始地址,strB的值是strB对象的起始地址,那这两者到底有什么区别呢?rnrn是不是所有复杂类型的变量,都是指针,它的值是不是都是该变量的起始地址呢?rn
boost库的shared_ptr怎么当类的成员变量用
在一个类中,不用这个智能指针时,可以直接定义一个变量,比如int* m_pInt,然后在构造函数或初始化函数之类的地方写m_pInt = new int[111];rn现在想要把m_pInt换shared_ptr m_pInt的,要怎么做呢?
类间通信-通过指向对象的指针
例1: ① #include using namespace std; class A{ private:int x; public: A() { this->x=0; } A(int x) { this->x=x; } void fun() { cout"x="<<x<<end
指向对象的指针
正常情况下对象一经声明就为对象的成员分配存储空间,并调用其构造函数进行初始化,对象生存期结束后自动调用析构函数,并释放对象占用的空间。缺点:造成内存紧张 解决途径:先声明这些对象,在需要这些对象时才分配存储空间和调用构造函数,使用完之后可以立即调用析构函数释放其内存空间。这一途径使用C++语言指向对象的指针。 先定义一个类 class prince{ public: void set...
指向数据对象的指针
什么是数据对象? (1)是内存中一段定长的、以Byte为基本单位的连续区域 (2)这段内存区域中的内容表示具有某种类型的一个数据 注:数据对象的类型不一定是简单数据类型(int,long,double等), 也可以是派生类型,比如数组,甚至指针等。 当说到某个指针指向”i“时,其确切含义是指向”i“所占据内存的整体。 eg.指向Int类型数据的确切含义是指向一块大小为 sizeof(int ) ...
c++指向对象的指针
通过指向对象的指针访问成员是,要用指针操作符 -&amp;amp;gt; this只能在成员函数中被调用,指向当前的对象。
指向对象成员的指针
#include <iostream> #include <string> using namespace std;class Student { public: Student(int n, string nam, char s) { num = n; name = nam; sex = s; cout << "Con
(一三一)指向对象的指针
类对象也可以像基本类型那样,使用指针。 假如有Man类的对象a,可以使用指针指向它: Man*c=&amp;a; 这里表示指针c(类型为Man)指向对象a的地址(使用地址运算符&amp;)。 也可以使用new: Man*a=newMan; 这是new一个动态内存地址,类型为Man,然后用a指向地址。 new的过程中,调用默认构造函数创建一...
指针怎样指向对象?
如struct Map//每点图的属性;rnrn int pictureIndex;rn BOOL isClick;rn Map *next;rn;rnrnMap map[10][10];rn我要用Map *p;rn 我要p指向map数组的一个对象,如map[3][4],怎么才能做到啊???rn我想p=&map[3][4],但是会报错。。rn
指向类的成员函数的指针
指向类的成员函数的指针程序如下,和书上写的一样,但是会出错,请指教。rn#includernclass mcrnrnpublic:rn int f()rn rn return 1;rn rn;rntypedef int (mc::*pp)();rnvoid main()rnrn mc a;rn pp p=&mc::f;rn cout<
指向学生类的指针
 #include using namespace std; class Student { public:     Student(int a,double b):num(a),score(b){}     int getnum();     double getscore();     void xinxi(); private:     int num;   //
指向类的指针
指向类的指针,定义以后是不是还要初始化一下那?
指向类的成员的指针
  在C++语言中,指向类的成员的指针包括指向类的数据成员和成员函数这两种指针。 例如,有如下一个类: class A { public: int fun(int b){ return a*c+b; } A(int i){ a = i; } int c; private: int a; }; 1.定义一个指向类A的数据成员c的指针pc,格式如下: in...
C++ 指向类的指针
#include #include #include #include #include #include using namespace std; class Box {    public:       Box(double l=2.0, double b=2.0, double h=2.0)       {          cout
用auto_ptr类与直接指向某类的区别??
auto_ptrpoint;rnsomeclass *point;rn好象一样的,各位我崇拜至及的老大们给个指导吧?谢谢
指向类的指针 学生信息类的指针
#include   using namespace std;    class Student  {  public:      Student(int n,double s):num(n),score(s) {}//构造函数      void display();      int getNum()  //相当于内联函数     {          ret
关于智能型指针auto_ptr的问题?
我们知道,在c++中const指针要被初始化的,否则出现编译错误。rn为什么auto_ptr可以这样定义const auto_ptr r;rnr也是一个指针呀,只不过它是类auto_ptr的对象,为什么不会编译错误?rn请各位赐教!!
C++ 指向类的指针
#include &amp;lt;iostream&amp;gt; using namespace std; class As{ public:          //定义一个类As,一般在C++中必须写public:,或者private:,默认是private的,那样的话,你的调用一般无效。     int aa=3330123;          int dd(int a){              re...
类 对象 静态变量 成员变量
1.对象:对象是存在的具体实体,具有明确定义的特征和行为。万物皆为对象,对象因我关注而产生。  类:类是具有相同属性和行为的一组对象的集合。在软件系统中,我们用类来模拟现实生活的实体。 类是对象的抽象,而对象是类的实例。 2.属性创建的方法:public String test();    属性的特点:属性是对象的特征,每个对象都有自己的独立的属性值,一个对象的属性发生变化,不会影响另一个
成员变量在栈上还是堆上?
class CTest { public: int iCount; };iCount在栈上还是堆上取决于类对象的声明方式;如果是: CTest = new CTest(); 那么iCount在堆上;如果是: CTest cTest; 那么iCount在栈上;
关于子类指针指向父类对象
类的函数即方法都是公用的,数据是私有的,比如定义一个类的空指针,如果不涉及内部属性即数据,也可以直接调用成功比如rnrnclass Parentrnrnpublic:rn void printP()rn rn printf("我是爹。。。\n");rn rnprotected:rn int a;rn int b;rn;rn定义一个Parent *k=nullptr; k->printp();//这样是可以正确调用的rnrnrnrn现在问题来了,如果这样rnclass Parentrnrnpublic:rn void printP()rn a=2;rn cout<<"a="<printC();//派生类指针调用派生类函数(涉及内部数据),rn system("pause");rn[/code]rnrn运行结果rn[img=https://img-bbs.csdn.net/upload/201502/10/1423556953_273548.png][/img]rnrnrn类的函数都是公用的,数据是私有的,比如定义一个类的空指针,如果不涉及内部属性即数据,也可以调用成功, 但这样如果定义一个父类对象,派生类指针指向父类对象,再调用子类的函数(函数涉及内部变量)为啥成功了 ,竟然没报错,求大神解释rn
一个关于指向对象的指针的问题。
我定义了一个类rnclass test2rnrn public:rn int c1;rn;rnrnvoid main()rnrn test2 * T;rn T->c1=10;rnrn编译通过,但执行时报错“0x004010cb指令调用oxcccccccc内存,该内存不能为written”.rn为什么呢?
一个关于指针指向对象的问题!
void FillRect( LPCRECT lpRect, CBrush* pBrush );rn函数原型rnFillRect(&CRect(m_ptOrigin,point),&brush);rnFillRect(CRect(m_ptOrigin,point),&brush);//为什么这里的第一个参数是对象也可以呢?rn我调试了这两种写法都正确。rn
关于返回指向局部变量(对象)指针问题
int *fun(...)rnrnint *q=NULL;rnreturn q;rnrn我知道不要返回指向局部变量(对象)指针,因为一旦函数结束,局部对象(变量)被释放,返回的指针就变成了野指针了rn但是我今天看了个资料有段代码的形式是这样的,它临时指针指向了NULL,这样可以吗??(这本书不一定说的对 因为我前面看这本书的时候都看出来有错误了)
相关热词 c# stream 复制 android c# c#监测窗口句柄 c# md5 引用 c# 判断tabtip 自己写个浏览器程序c# c# 字符串变成整数数组 c#语言编程写出一个方法 c# 转盘抽奖 c#选中treeview