c++学习笔记—动态内存与智能指针浅析
我们的程序使用内存包含以下几种:
- 静态内存用来保存局部static对象、类static数据成员以及定义在任何函数之外的变量,在使用之前分配,在程序结束时销毁。
- 栈内存用来保存定义在函数内部的非static对象,仅在其定义的程序块运行时才存在。
- 堆内存用来存储动态分配的对象,即那些在程序运行时分配的对象,动态对象的生存周期由程序控制,当动态对象不再使用时,我们的代码必须显式的销毁他们。
- shared_ptr<string> p1; //指向string
- shared_ptr<list<int>> p2;//指向int的list
解引用一个智能指针返回它指向的对象
- shared_ptr<vector <int>> vec = make_shared<vector <int>>(); //不传递任何参数,对象进行值初始化
- shared_ptr<int> p1 = make_shared<int>(1); //指向一个1的int的shared_ptr
- unique_ptr<double> p1; //指向double,初始化为一个空指针
- unique_ptr<int> p2(new int(1)); //p2指向一个值为1的int
2、基本用法
- #include "stdafx.h"
- #include <vector>
- #include <iostream>
- #include <memory>
- using namespace std;
- vector<int> alloc_new() //使用内置指针
- {
- vector<int> *vec = new vector<int>;
- return *vec;
- delete vec;
- }
- vector<int> alloc_shared()
- {
- shared_ptr<vector <int>> vec=make_shared<vector <int>>(); //使用智能指针
- return *vec;
- }
- vector<int> input(vector<int> &ve)
- {
- ve = alloc_new();
- int i;
- while (cin >> i)
- {
- ve.push_back(i);
- }
- return ve;
- }
- void print(vector<int> pvec)
- {
- pvec = input(pvec);
- for (auto it = pvec.begin(); it != pvec.end(); it++)
- cout << *it << endl;
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- vector<int> i;
- print(i);
- return 0;
- }
c++学习笔记—动态内存与智能指针浅析的更多相关文章
- 【足迹C++primer】39、动态内存与智能指针(3)
动态内存与智能指针(3) /** * 功能:动态内存与智能指针 * 时间:2014年7月8日15:33:58 * 作者:cutter_point */ #include<iostream> ...
- 12.动态内存和智能指针、 直接管理内存、shared_ptr和new结合使用
12.动态内存和智能指针 1.智能指针分为两种shared_ptr和unique_ptr,后者独占所指向的对象.智能指针也是模板,使用时要用尖括号指明指向的类型.类似emplace成员,make_sh ...
- 【C++】动态内存与智能指针
C++常见的内存分配方式有三种: 从静态存储区分配,这里主要是存储局部static对象,类的static成员以及定义在函数之外的变量: 从栈内存分配,这里主要是存储函数内的非static对象: 从堆内 ...
- C++相关:动态内存和智能指针
前言 在C++中,动态内存的管理是通过运算符new和delete来完成的.但使用动态内存很容易出现问题,因为确保在正确的时间释放内存是及其困难的.有时候我们会忘记内存的的释放,这种情况下就会产生内存泄 ...
- Binder学习笔记(十一)—— 智能指针
轻量级指针 Binder的学习历程爬到驱动的半山腰明显感觉越来越陡峭,停下业务层的学习,补补基础层知识吧,这首当其冲的就是智能指针了,智能指针的影子在Android源码中随处可见.打开framewor ...
- c++ boost库学习二:内存管理->智能指针
写过C++的人都知道申请和释放内存组合new/delete,但同时很多人也会在写程序的时候忘记释放内存导致内存泄漏.如下所示: int _tmain(int argc, _TCHAR* argv[]) ...
- C语言学习笔记--动态内存分配
1. 动态内存分配的意义 (1)C 语言中的一切操作都是基于内存的. (2)变量和数组都是内存的别名. ①内存分配由编译器在编译期间决定 ②定义数组的时候必须指定数组长度 ③数组长度是在编译期就必须确 ...
- linux kernel学习笔记-5内存管理_转
void * kmalloc(size_t size, gfp_t gfp_mask); kmalloc()第一个参数是要分配的块的大小,第一个参数为分配标志,用于控制kmalloc()的行为. km ...
- 必须要注意的 C++ 动态内存资源管理(二)——指针对象简单实现
必须要注意的 C++动态内存资源管理(二)——指针对象简单实现 四.拷贝类型的资源 上节我们说过,对于图片类型的资源我们有时候往往采用拷贝(如果对于那种公共图片,可能采用唯一副本,提供 ...
随机推荐
- SSH框架环境搭建问题:Line: 230 - com/opensymphony/xwork2/spring/SpringObjectFactory.java:230:-1
只是通过myeclipse搭建一个框架而已 启动tomcat时报错信息: File: SpringObjectFactory.java Method: getClassInstance Line: 2 ...
- vi 新建文件后保存文件时遇到的问题:E212: 无法打开并写入文件
问题描述 使用vi编辑器写好内容后保存并退出时遇到以下问题 解决方案 该问题的原因是用户权限不够,因为普通用户用 vi 不能保存文件,需要使用超级用户才可以. 先转换为超级用户:su 再用vi打开文件 ...
- OpenGL基本框架与三维对象绘制
上次我们介绍了OpenGL的环境构建和二维对象的绘制,这次我们来讲讲三维对象的绘制: 绘制代码如下: Github代码仓库 // opengltest2.cpp : Defines the entry ...
- Prolog学习:基本概念
上一篇对Prolog有了一个感性的认识,今天介绍下Prolog中一些基本概念,想要用Prolog解决一些实际问题之前必须要先了解它们.这些概念在<七周七语言>这本书中都有介绍,我简单提炼汇 ...
- Tomcat 部署一工程时Deploy Location 为什么 是 INVALID
1.eclipse项目: 在项目的.settings目录下,找到org.eclipse.wst.common.component文件: <?xml version="1.0" ...
- 允许root远程登录Solaris
注释掉:/etc/default/login文件中CONSOLE=/dev/console
- categorys源码
CREATE TABLE `category` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `editdate` char(20) NOT NUL ...
- 新浪股票接口AndroidSDK
昨天想到一个点子,需要访问股票行情.于是在网上搜了一下免费的股市行情的接口.发现新浪股票的数据接口比较稳定,于是就用它了. 网上对于新浪股票的数据接口介绍比较详细,并且实现也很简单,所以花了一下午就基 ...
- C语言的结构体
举例,一个结构体的定义如下: typedef struct _foo { ]; int age; int sex; } foo; 对齐 如果直接对上面的结构体作sizeof()运算: printf( ...
- eclipse中断点不生效
摘录自:http://blog.sina.com.cn/s/blog_496117520100kw6b.html Eclipse下Debug时弹出错误“Unable to install breakp ...