最近遇到了一个用placement new动态创建二维数组的问题,分享一下
来源:互联网 发布:mysql 并发 version 编辑:程序博客网 时间:2024/05/16 15:21
老大说,叫我研究一下动态分配二维数组,教我研究一下,不多说,直接上代码
#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <cstdlib>
#include <new>
class A{
public:
void printA(int i){
printf("我是%d\n\n",i);
}
};
template <typename T>
T **darray_new(int row, int col)
{
int size = sizeof(T);
void **arr = (void **)malloc(sizeof(void *) * row + size * row * col);
if (arr != NULL)
{
unsigned char * head;
head = (unsigned char *)arr + sizeof(void *) * row;
for (int i = 0; i < row; ++i)
{
arr[i] = head + size * i * col;
for (int j = 0; j < col; ++j)
new (head + size * (i * col + j)) T;
}
}
return (T**)arr;
}
template <typename T>
void darray_free(T **arr, int row, int col)
{
for (int i = 0; i < row; ++i)
for (int j = 0; j < col; ++j)
arr[i][j].~T();
if (arr != NULL)
free((void **)arr);
}
int main(){
A **a = darray_new<A>(4, 3);
for (int i = 0; i < 4; i++)
for (int j = 0; j < 3; j++)
a[i][j].printA(i * 3 + j);
darray_free(a, 4, 3);
return 0;
}
网上找到的一位大神的文章,还有包括C的http://www.360doc.com/content/11/1202/10/2036337_169077281.shtml
- 最近遇到了一个用placement new动态创建二维数组的问题,分享一下
- 关于动态new二维数组的问题
- 没有躲过的坑--new一个指针数组、以及创建动态二维数组
- 创建一个动态的二维数组
- 动态创建一个二维数组
- placement new 的问题
- c++ 的用 new 和delete 进行二维数组动态内存的创建和删除
- 遇到的一个问题和大家分享一下
- 遇到了一个C++的小问题,百度了一下
- //用new创建一个二维数组,有两种方法,是等价的
- 用new创建一个二维数组,有两种方法,是等价的
- 一个纠结的c++动态创建二维数组不能用的问题
- 今天解决了一个C++中动态二维数组的问题
- 二维数组的动态创建
- 二维数组的动态创建
- 二维数组的动态创建
- 二维动态数组的创建
- java如何创建并初始化一个动态的二维数组
- HTML&CSS基础篇之七:XHTML 标准、规范
- mybatis+javaweb+mysql
- 关于JSP和jstl搜索和分页的个人备忘(草稿)
- 怎样在VS2017中引入FileTransfer
- 面试题关于cookie,session,application的区别
- 最近遇到了一个用placement new动态创建二维数组的问题,分享一下
- hdu2141 二分查找
- 手机触屏触摸特效javascript-TouchSwipe(依赖于jquery库)中文说明
- Shell系列—Shell简介
- sql server 时间筛选默认时间
- Ubuntu14.04 opencv2.4.8和opencv3.2多版本共存
- 前端浏览器兼容之——css hack
- 银联POS机的结算过程如何?
- Linux C Socket