SDL中文论坛
标题:
surface
[打印本页]
作者:
ancientcc
时间:
2016-5-13 23:28
标题:
surface
surface构造函数规则
SDL_Surface赋给surface,surface中的SDL_Surface的引用计数保持不变。
surface赋给surface,surface中的SDL_Surface的引用计数加1。
surface提供了对SDL_Surface的自动释放操作。它假设应用程序需要的是以下逻辑。
创建了一个SDL_Surface,然后把它赋给第一个surface。(此操作不改变引用计数,保持SDL_Surface原来的引用计数:1)
当要使用SDL_Surface,应用程序都是用surface而不是SDL_Surface。(逻辑会保证SDL_Surface的引用计数值等于surface个数,会保证最后一个surface释放时SDL_Surface会自动释放)
应用程序可以从surface提取出SDL_Surface,但要保证不把它赋给一个新的surface。
对于第三条,让看破坏后会出什么情况。
从surface1提取出SDL_Surface。这时SDL_Surface的引用计数保持不变,依旧是1。
把此个SDL_Surface又赋给surface2。
它执行的是surface(SDL_Surface*)操作,依据规则“SDL_Surface赋给surface,surface中的SDL_Surface的引用计数保持不变”,引用计数依旧是1!
这导致一个错误结果:系统中存在2个指向同一SDL_Surface的surface,但该SDL_Surface的引用计数是1。
surface.assign(const surface& o)
surface1.assign(surface2)和surface1=surface2逻辑是一样的。它们的计算量也一样。
surface2指向的SDL_Surface引用计数加1
surface1指向的SDL_Surface引用计数减1
surface1指向的SDL_Surface等于surface2指向的SDL_Surface。
结果
当surface1和surface2指向的SDL_Surface不一致时,surface1中的引用计数将减1,surface2中的引用计数将加1。
当surface1和surface2指向的SDL_Surface一致时,执行此函数后对两者结果无影响。
assign还有另一版本:void assign(SDL_Surface* surf),即直接把SDL_Surface赋给surface,它和前面的不同是不执行第一步。这个相比于surface1 = SDL_Surface*倒是可少点计算量,后者等于是执行三条语句。
surface2 = SDL_Surface*
surface1 = surface2
自动析构surface2; (surface2是临时对象)
注:surface1 = SDL_Surface*不会改变SDL_Surface的引用计数!
复制代码
欢迎光临 SDL中文论坛 (http://www.libsdl.cn/bbs/)
Powered by Discuz! X3.3