Up1

DDS转换工具

风格不统一 提交于 2020-07-27 03:51:38
本工具用于将(长宽均为 2 的指数次幂的)图像文件如 PNG、TGA、BMP、JPG 等转换为 DDS 图像(DXT 压缩类型可选,DXT1~DXT5),也可将 DDS 图像转换回此几种格式图片。 截图如下: 工具下载链接在 这里 。 注:本软件开发工具为 Delphi XE6 UP1,可能会有杀毒软件拦截。当然,我们已习惯了误报,及滥报。 来源: oschina 链接: https://my.oschina.net/u/4292686/blog/4335740

智能指针

丶灬走出姿态 提交于 2020-05-04 03:48:43
C++98中的智能指针通过一个模板类 auto_ptr 来实现, new 操作符返回的指针可以交由它来管理,程序员不用再显式的调用 delete ,这在一定程度上避免了堆内存忘记释放的问题; 不过 auto_ptr 有一些缺点,比如拷贝时返回一个左值,不能调用delete[]等 。 C++11中废弃了 auto_ptr ,改用 unique_ptr、shared_ptr、weak_ptr 等智能指针来自动回收堆分配对象,使内存管理更安全,智能指针的使用场景也变得更全面。 unique_ptr和shared_ptr unique_ptr是唯一性智能指针,无法进行复制,但是可以移动。而shared_ptr是共享性智能指针,采用引用计数,可以拷贝和移动,移动时引用计数不会变化。 Example #include <memory> #include <iostream> using namespace std; int main() { unique_ptr<int> up1(new int(11)); unique_ptr<int> up2 = up1; //不能通过编译 cout << *up1 << endl; //11 unique_ptr<int> up3 = move(up1); //现在p3是数据唯一的unique_ptr智能指针 cout << *up3 << endl;

[c++] Why should I use Smart Pointers

感情迁移 提交于 2020-04-26 14:57:45
深入理解智能指针 专有指针 Ref: unique_ptr的使用和陷阱 一、初始化 只可以使用new来分配内存,不可 拷贝和赋值。 unique_ptr< int > up1( new int ()); // okay,直接初始化 unique_ptr < int > up2 = new int (); // error! 构造函数是 explicit unique_ptr < int > up3(up1); // error! 不允许拷贝 二、基本操作 unique_ptr<T> up 空的unique_ptr,可以指向类型为T的对象,默认使用delete来释放内存 unique_ptr <T,D> up(d) 空的unique_ptr同上,接受一个D类型的删除器d,使用删除器d来释放内存 up = nullptr 释放up指向的对象,将up置为空 up.release() up放弃对它所指对象的控制权,并返回保存的指针,将up置为空,不会释放内存 up.reset(…) 参数可以为 空、内置指针,先将up所指对象释放,然后重置up的值. View Code 三、参数、返回值 unique_ptr不可拷贝和赋值,那要怎样传递unique_ptr参数和返回unique_ptr呢? 事实上不能拷贝unique_ptr的规则有一个例外:我们可以拷贝或赋值一个将要被销毁的unique

C++和JAVA下的内存资源管理

放肆的年华 提交于 2019-12-03 02:12:25
1.引言 不管在哪种系统平台/编程语言下,内存资源管理是非常重要的问题,稍不留意就会导致内存泄漏,更有甚者访问非法空间,导致错误。说到底,没有在合适的时机释放对象,或者访问了已经释放的资源。在有垃圾回收的语言中,由平台环境负责资源的及时回收;在C++中则需要程序员自己把握,在一些多线程状态下,对象资源的释放时机常常不好把握,导致了各种各样的问题。为什么大家喜欢用带有GC功能的语言做开发,是因为少了太多的心智负担(JAVA, C#, Python ...)。 2.C++下的资源管理方式 2.1 针对原生指针的资源管理 针对原生指针的管理方式,学校老师常常这么教:谁创建、谁释放。要配对,不过现实往往没那么理想,在单线程处理程序中这样没有问题,但是在多线程中有时候做不到。我现在通常的做法是做一个簿记工作,对于系统中大量使用的对象资源,尤其是跨线程使用的,会集中管理登记,并配以状态标记,确认对象使用完毕后再行释放。对象自身跟随业务状态变化,有明确的开始和结束状态。 2.2 通过智能指针进行资源管理 在C++ 中有多种类型的智能指针,有些被重用,而有些却被放弃,在陈硕的《Linux多线程服务端编程》中,推荐使用shared_ptr以及weak_ptr进行资源管理。此处梳理一下C++中的智能指针。看看各自如何使用,适合在什么场景下使用。 2.2.1 unique_ptr unique