关于类的成员变量指向在堆上的对象的选择:指针/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++
0

1个回答

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

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C++智能指针shared_ptr的三种使用方式
智能指针通常是指基于引用计数的智能指针,在c++11标准中就是std::shared_ptr。它的特点是如果可以安全的放入STL容器中。 有以下三种方式可以使用shared_ptr 1. 如果你的c++编程环境支持c++标准,那么可以直接使用 std::shared_ptr,它定义在memory文件中。 2. 如果你的c++实现支持 C++TR1库扩展,那么可以使用 std::tr1::sh
c++自动释放的指针之——auto_ptr和shared_ptr
假设我们使用一个用来塑模投资行为(例如股票、债券等)的程序库,其中各式各样的投资类型集成自一个root class Investment: class Investment { ... };//&quot;投资类型&quot;集成体系中的root class 进一步假设,这个程序库通过一个工厂模式供应我们某特定的Investment对象: Investment* createInvestment(); /...
当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、unique_ptr、shared_ptr之间的简单比较
三个智能指针auto_ptr、unique_ptr、shared_ptr之间的简单比较 三个智能指针位于头文件memory中。 auto_ptr由 C++98 提供,已被 C++11 抛弃。 类型 策略 能否用于数组 备注 auto_ptr 所有权模型 否 - unique_ptr 所有权模型 能 策略比auto_ptr更严格 shared_ptr 引用计数模型 否 -...
shared_ptr(共享指针)使用总结
背景介绍         最近在coding的时候遇到这样的问题,一个两层的map,hashmap>,重新加载时需要将这个map释放,但是这个map使用时是分为两段使用,一段是在hashmap中取出里面的map,第二段是在里层的map中查找key,这在多线程运行时有可能出现在取出里层map的引用后,重新加载数据并且释放掉现在的hashmap,这个场景引起了我对shared_ptr共享指针的关
实现auto_ptr的两种方法
我们都知道,实现auto_ptr有两种方法:第一种方法:在上一篇博客中我已经实现了,主要思想是管理权转移。第二种方法:它是我们c++标准库中以前的一个版本,主要思想是在auto_ptr类中除了有一个指针的成员变量以外还有一个bool类型的成员变量_owner。构造函数中将_owner设为真,表示对象是指针所指向的内存的拥有者,当要赋值时(ap1=ap2),将ap1的_owner置为true,ap2
指向对象成员变量的指针
指向对象成员变量的指针
c++11智能指针解析——揭开底层面纱,完整理解智能指针
昨天跟同事小小的研究了下关于不同平台下,起因是遇到了一个坑,vs上没有问题,在安卓上却崩溃了。找了半天后发现是c++字节补齐问题,期间包括使用#pragma pack(1)来限定字节对齐方式等各种条件,也是把我们搞的七晕八素,总算是进一步了解了c++对象结构以及编译器的操作(有机会的话也补充下字节对齐的理解)。进而想到了智能指针,稍微了解下。第一次接触智能指针,天知道大学期间自己有多不努力,很多知
智能指针基础std::auto_ptr与new、delete的重载学习笔记
在C/C++中我们malloc/new申请的内存都要自行释放,除非程序结束,否则会造成内存泄漏,这么久以来分配释放已经成为一个习惯,但是有时候还是会有疏漏,忘记释放。而C++中有这么一类东西,它可以替我们释放不再使用且未手动释放的内存,这种所谓的东西就叫做智能指针。而智能指针有多种(std::auto_ptr、boost::scoped_ptr、boost::shared_ptr、boost::sc
c++中的智能指针auto_ptr解析
c++中的auto_ptr是一个类,却可以像指针一样去使用。使用auto_ptr需要包含头文件#include 例如:auto_ptr ps(new string("hello"));可以像指针一样去使用它,cout size() 引例: #include #include using namespace std; class A{ public: A(int x = 0) :m_
c++,在class内部获得this指针的shared_ptr
在class内部,获得this指针的shared_ptr,需要class继承std::enable_shared_from_this,示例代码如下: #include &amp;lt;memory&amp;gt; #include &amp;lt;iostream&amp;gt; class SharedTest :public std::enable_shared_from_this&amp;lt;SharedTest&amp;gt; { ...
智能指针:shared_ptr和unique_ptr,优先使用unique_ptr
智能指针是比raw 指针更智能的类,解决 dangling指针或多次删除被指向对象,以及资源泄露问题,通常用来确保指针的寿命和其指向对象的寿命一致。智能指针虽然很智能,但容易被误用,智能也是有代价的。 通常有两大类型的智能指针:独占式unique_ptr和共享式shared_ptr。这两者的区别和使用场景,更适合使用unique_ptr的场景:1.语义简单,即当你不确定使用的指针是不是被分享所有权...
c++中智能指针auto_ptr与shared_ptr的使用方法
原文地址:http://blog.csdn.net/gui694278452/article/details/46348733 1. 简介 C++程序员最痛苦的莫过于对内存的管理,由于没有像C# 和 java的内存回收机制,C++程序员在复杂的程序中容易造成内存的泄露。即使程序员十分小心,异常的产生也有可能会造成部分内存的泄露(由于异常导致delete语句没有机会执行)。为了避免该问题,出
c++的成员变量是在堆还是栈区
成员变量并不能决定自身的存储空间位置。决定存储位置的对象的创建方式。即:如果对象是函数内的非静态局部变量,则对象,对象的成员变量保存在栈区。如果对象是全局变量,则对象,对象的成员变量保存在静态区。如果对象是函数内的静态局部变量,则对象,对象的成员变量保存在静态区。如果对象是new出来的,则对象,对象的成员变量保存在堆区。...
C++11中使用std::share_ptr管理指向普通类型指针的动态数组时一点注意
参考文章:shared_ptr to an array : should it be used?在创建指向普通类型的动态数组时,需指定对应的删除函数如:template&amp;lt; typename T &amp;gt; struct array_deleter { void operator ()( T const * p) { delete[] p; } }; std::shar...
【C++/Boost Lib】如何初始化一个shared_ptr指针。
shared_ptr指针带有有参数的gouca
auto_ptr 与 shared_ptr 用法和区别总结
1.auto_ptr 被复制后,将失去原来所致资源的所有权;
c++ 局部对象指针及到底是在堆上创建的对象还是在栈上创建的?
~~~~我的生活,我的点点滴滴!!
【涨姿势】boost库中的智能指针向上转换
这里稍微解释下何谓指针类型的向下转换和向上转换。向下转换是指派生类指针转换为基类指针类型,向上转换是指基类指针类型转换为派生类类型。C++一般使用dynamic_cast转换符实现向上转换。智能指针可以毫无问题的进行向下类型转换,却不能使用dynamic_cast进行向上类型转换。例如: #include "boost/shared_ptr.hpp" class Base { publ
浅谈auto_ptr智能指针
在c++标准库里主要有三个智能指针: ①auto_ptr 在任何情况下都不要使用 ②scoped_ptr 独占空间,防拷贝和赋值,是对第①个智能指针的缺陷所作出的解决 ③shared_ptr 利用引用计数,和其他对象共享一块空间(与weak_ptr结合使用) 这篇文章主要的内容是讲解auto_ptr所引出的一系列问题: 一、AutoPtr智能指针
类的对象的定义以及指向类成员及成员方法的指针
一.对象定义 1.sizeof(class)给对象开辟内存 2.成员变量(成员对象)的初始换=》当前类的构造函数的初始化列表种指定 注意一点:成员变量(对象)的初始化顺序是:他们定义的顺序,而和初始化列表顺序无关 3 根据对象定义的方式,调整合适的构造函数 问题:有哪些成员变量必须在初始化列表中初始化: 1  引用的变量 2 const 常量 三种面向对象的成员方法: 一 类的普
C++之指向数据成员的指针和指向成员函数的指针
这里指向数据成员的指针和指向成员函数的指针与指向变量的指针和指向函数的指针进行对比来解释,比较好理解一些。指向变量的指针和指向函数的指针先举个例子:void func(int a, int b){ cout << a << " " << b << endl; }int main() { int a = 10, b =20; int *p = &a; //指向变量a的指针
C++智能指针auto_ptr的原理及使用
std::auto_ptr auto_ptr是C++标准库中()为了解决资源泄漏的问题提供的一个智能指针类模板(注意:这只是一种简单的智能指针) auto_ptr的实现原理其实就是RAII(Resource Application Immediately Initialize),在构造的时候获取资源,在析构的时候释放资源,并进行相关指针操作的重载,使用起来就像普通的指针。 使用auto_pt
C++11智能指针(四):创建shared_ptr对象
1、尽量不要使用相同的原始指针来创建多个shared_ptr对象,因为在这种情况下,不同的shared_ptr对象不会知道它们与其他shared_ptr对象共享指针。这样会造成什么样的问题?设想两个shared指针由相同的原始指针创建:int *rawPtr = new int(); std::shared_ptr&amp;lt;int&amp;gt; ptr_1(rawPtr); std::shared_ptr...
指向对象成员变量的指针和指向成员函数的指针
1.指向对象成员变量的指针: 形式:  数据类型名 * 指针变量名 定义了一个指针,指向对象的成员变量    实例:                Stu.h                                                                                        Stu stu: int *p=&(stu.age);/
C++11及C++14标准的智能指针
智能指针这个概念经常会碰见,而且面试的时候太经常会被问到了,特来总结一下。 C++11的智能指针及其背景 auto_ptr的坑点 C++11之前的智能指针是auto_ptr,一开始它的出现是为了解决指针没有释放导致的内存泄漏。比如忘了释放或者在释放之前,程序throw出错误,导致没有释放。所以auto_ptr在这个对象声明周期结束之后,自动调用其析构函数释放掉内存。 int t =
c++ 指向对象成员的指针
在c++中类是抽象的,没有实际内存,而对象是具体,是占有内存的,因此对象有地址,存放对象的起始地址的指针变量就是指向对象的指针变量。对象中的成员也是占有内存的,所以,存放对象成员的起始地址的指针变量就是指向对象成员的指针变量。1.指向对象数据成员的指针int *p1;   //定义指向整形数据的变量p1 = &amp;amp;t1.hour;     //把hour的地址赋给p1cout&amp;lt;&amp;lt;*...
C++智能指针shared_ptr讲解与使用
手动管理的弊端 在简单的程序中,我们不大可能忘记释放 new 出来的指针,但是随着程序规模的增大,我们忘了 delete 的概率也随之增大。在 C++ 中 new 出来的指针,赋值意味着引用的传递,当赋值运算符同时展现出“值拷贝”和“引用传递”两种截然不同的语义时,就很容易导致“内存泄漏”。 手动管理内存带来的更严重的问题是,内存究竟要由谁来分配和释放呢?指针的赋值将同一对象的引用散播到程序各处,...
C++怎么用指针访问类中私有成员变量。
C++类中的私友成员是不能通指针操作的。但是总有方法可以做到。可以用: 类中Public 成员指针指向私友成员。 这时类外部的成员可以操作Public成员指针,间接的操作类私成员。#include &amp;lt;iostream&amp;gt; using namespace std; class A { int a;//private public : int b;//public void f1 ()...
C++对象指针数组与堆中对象数组
#include using namespace std; /*堆中对象数组、对象指针数组*/ class stu { public: void set(int x){i = x + 6;} int get(){return i*i;}; private: int i; }; void main() { const int n = 1000; stu * p = new stu[n];
C++类里面定义一个指向自己的静态成员指针变量(实现单例)
1、使用方法 我们在头文件中声明一个如下的类,定义一个指向该类自己的静态成员指针变量kpHttpClientInstance; class CHttpClient { public:       CHttpClient();     ~CHttpClient();     static CHttpClient* GetInstance();     int Init(const string...
shared_ptr智能指针模板类的简单实现(c++11)
前言 最近突然萌生把stl常用的库都通通自己过一遍的想法,算是对泛型编程的一次学习,也深入理解stl,还是对c++11知识的练习,就从智能指针开始吧。 另外,c++11让c++程序变得简洁优雅了许多,对这门语言有点爱不释手了。 智能指针原理 通过使用引用计数的方式来自动的对动态申请的内存进行释放,保证指针的生存期和安全性。 对智能指针初始化的时候,会将引用计数初始为1,之后每次拷
关于c++类中的指针成员问题
C++类中指针成员的管理:   有三种解决方案:       1.全部用值类型指针:            优点:可以很安全而且简单。            缺点:占用大量的内存,并且内存CPY运算量巨大。            方法:写如下几个函数:                     复制构造函数。                     析构函数。           
c++——类对象和类指针(作用基本一样:都是为了调用类的成员变量和成员函数)
代码:1234567Student a; //实例化一个类对象as.setName(&quot;A&quot;); //Studeng *b = new Student();Student *b; //实例化一个类指针bb = new Student();b-&amp;gt;setName(&quot;B&quot;);分析:定义类对象基本格式是:Student a;在定义之后就已经为a这个对象分配了内存,且为内存栈;定义类指针基本格式是:St...
关于含有指针成员的类的对象之间赋值指针的问题。
在C++ 中,当定义了一个类,类的成员中有指针的时候,需要注意:如果将类的对象A赋值给B的时候,两个对象的指针是指向同一个地址的,其余的变量都是相等的。在图像处理中,比如定义了一个图像类,类成员中有具体的图像数据,如果将两个对象直接相等,会使两个对象的数据指针指向同一个地址。如果要使两个对象的指向不同的地址可以为类定义一个函数,用于两个对象之间的直接赋值运算。下面以例子说明。         声
关于动态分配vector指针和使用shared_ptr的vector指针
动态分配的vector指针 vector *get_num(int n) { vector *pv = new vector(n+1); int i , x; for(i = 0; i < n; i++) { cin>>x; (*pv)[i] = (x); } return pv; } 如果是动态分配的vector
智能指针shared_ptr与unique_ptr详解
为什么使用动态内存 程序不知道自己需要多少对象; 程序不知道对象的准确类型; 程序需要在多个对象之间共享数据; 动态内存在哪里 程序有静态内存、栈内存。静态内存用来保存局部static对象、类static数据成员以及定义在任何函数之外的变量。栈内存用来保存定义在函数内的非static对象。分配在静态或栈内存中的对象由编译器自动创建或销毁。对于栈对象,仅在其定义的程序块运行时才存在;s...
c++ 容器中管理存放继承类对象的智能指针
需求: 多种继承类/子类 对象共同存放于容器中, 要求能push进不同对象,pop出来后能实现多态。 实现分析: 这种情况就得容器中存放基类指针,但是存放指针就意味着得自己管理内存,主动释放。 有没有方法让c++自己去管理呢,答案是用智能指针。 示例代码: 容器中存放的是unique_ptr, pop出来后可以转成shared_ptr给外界去调用。超级方便 #include &amp;lt;s...
Qt 中的智能指针
Qt 中的智能指针上一篇博客中介绍了 C++11 标准中的提供的智能指针。在 Qt 中也提供了类似的替代功能,并且比 C++11 标准中提供的功能还要强大,所以如果我们使用 Qt 作为基础库,那么就没有必要使用C++11 的智能指针。Qt 的智能指针包括: QSharedPointer QScopedPointer QScopedArrayPointer QWeakPointer QPointer
C++11 智能指针之 std::shared_ptr 初级学习
shared_ptr概念 shared_ptr基于“引用计数”模型实现,多个shared_ptr可指向同一个动态对象,并维护了一个共享的引用计数器,记录了引用同一对象的shared_ptr实例的数量。当最后一个指向动态对象的shared_ptr销毁时,会自动销毁其所指对象(通过delete操作符)。 shared_ptr的默认能力是管理动态内存,但支持自定义的Deleter以实现个性化的资源释放动作
文章热词 设计制作学习 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 关于java类机器学习 java学习对象类