栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【c++】智能指针

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【c++】智能指针

malloc() 函数在 C 语言中就出现了,在 C++ 中仍然存在,但建议尽量不要使用 malloc() 函数。new 与malloc() 函数相比,其主要的优点是,new 不只是分配了内存,它还创建了对象。只有malloc创建的指针对象是可以通过free去释放内存的,如果malloc创建了指针变量ptr_a,然后将ptr_a的值赋值给另一个指针变量 ptr_b ,然后free(ptr_b) 是行不通的。只能去 free那个被 malloc 创建出来的指针变量。new 也是这样。 code

#include 
#include 
#include 

template 
class Array
{
    public:
        Array()
        {
            data_ = (T*)malloc(sizeof(T)*N);
            bytes_ = sizeof(T)*N;
        }
        ~Array()
        {
            free(data_); // Free a block allocated by `malloc', `realloc' or `calloc'.
            std::cout << "array destroy ......" << std::endl; 
        }

        void info()
        {
            std::cout << "first of this array is " << data_[0] << std::endl;
            std::cout << "length this array is " << (int)(bytes_ / sizeof(T)) << std::endl;
            for (int i=0;isize();i++)
            {
                std::cout << " -> "  << data_[i];
            }
            std::cout << "n";
        }

        void copy(T* data,size_t num_eles)
        {
            data_ = (T*)malloc(num_eles * sizeof(T));
            for (int i=0;i
void array_info(std::shared_ptr> p)
{
    std::cout << "array_info use_count() = " << p.use_count() << std::endl;
}

template
void delete_arr(Array* p)
{
    delete p;
}

int main()
{
    // malloc 和 new 很像,一个是函数,一个是运算符,创建的内存空间都需要手动释放
	
	// 智能指针的多种声明方式
    // std::shared_ptr> arr_p{new Array()};
    // auto arr_p = std::shared_ptr>(new Array());
    // auto arr_p = std::shared_ptr>{new Array()};
    auto arr_p = std::make_shared>();
    
    int arr2[] = {3,4,5,6,7};
    arr_p->copy(arr2,5);
    arr_p->info();
    array_info(arr_p);
    std::cout << "use_count() = " << arr_p.use_count() << std::endl;

    auto new_a =  new Array();
    delete_arr(new_a);

    auto new_arr = new int[10];
    delete []new_arr;
    
    auto aa = new int(10);
    delete aa;

}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/722791.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号