我一直在研究一个小应用程序,我一直在使用DirectX/3D在屏幕上绘制纹理(所有二维元素).我发现,API很容易使用,并且使用OOP原则进行合并,但是我不禁觉得在这个小的东西上使用DirectX是疯狂的过度杀戮.
不过,我似乎无法就一个好的选择找到共识.有什么建议?
编辑:本机alpha混合和PNG文件支持是必要的.
Jengerer拥有很多先发制人的爱
我在我string的应用程序中使用STL ,我最近测试它是否存在内存泄漏,我注意到我的很多字符串在程序结束时没有被正确释放.
我用其中一个字符串测试了下面的代码(不是逐字):
const string* cppString = &obj->objString;
const char* cString = cppString->c_str();
delete obj;
Run Code Online (Sandbox Code Playgroud)
在那之后,我把一个破发点,并注意到,虽然string是cppString指向不再存在,cString仍然指向C风格的字符串,这肯定不够的,是未能在年底被释放的人.
我是否遗漏了C/C++字符串的工作方式?如何才能获取要解除分配的字符串的C表示?
编辑:更多信息.我的obj类是Dialog继承的类型Popup.我认为这可能是它,因为当我删除时obj,我将其视为一个Popup*,但我在一个小的单独程序中尝试它,并删除作为父类正确删除子成员变量(这是有道理的,课程).
我在VS中使用了内存泄漏跟踪,它显示最终泄漏的字符串是我创建时创建的字符串,Dialog并设置objString为作为对构造函数的引用传递的字符串.
谢谢,
Jengerer
如果我有一个包含许多int,float和enum成员变量的类,那么将它们作为引用而不是副本返回它是否被认为是有效和/或良好的做法,并返回不应该进行更改的常量引用?或者我有理由将它们作为副本归还吗?
在使用DIV标签而不是TABLE在网页上分离/组织内容时,我注意到了一种常规的变化.在什么情况下使用比另一种更合适?
澄清:这个问题既普遍又具体,因为我主要寻找哪种更适合页面布局.
我遇到了我的Direct3D应用程序中的泄漏,我最终纠正了它,但我认为泄漏的原因是由于我对Direct3D如何处理其内存和接口的误解.
我无法找到关于它的权威文章/教程(请提供一个,如果你有一个),但从我收集的,它的工作原理如下:
Get方法时,返回的对象的引用数量都会增加.因此,如果我调用GetRenderTarget,渲染的表面的引用计数会递增.Release接口会减少其引用计数.前两个点的组合基本上意味着:每次获得界面时,请在完成后释放它.我不完全确定这是否正确,但似乎在实践中有效.如果有人能澄清/确认它是如何运作的,那就太好了.
PS,在发布接口时是否有任何保护措施?Release在后台缓冲区上调用任意次数似乎没有造成任何损害(这是一件好事,但我不确定为什么不这样做).
我希望能够在Struts 2中禁用一个动作的表单验证,但是其余的拦截器堆栈仍然可以运行.
我有一个拦截器,它检查用户是否已登录,我总是希望执行,但对于某些操作(例如输入信息),我不希望validate调用该操作.
我试过做类似以下的事情:
<interceptors>
<interceptor name="bankingAuthenticator"
class="csc309.a4.banking.BankUserAuthenticator"/>
<interceptor-stack name="secureBanking">
<interceptor-ref name="bankingAuthenticator"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="secureBanking"/>
<action name="Deposit!*" method="{1}" class="csc309.a4.banking.Deposit">
<result name="success">/banking/Deposit.jsp</result>
<interceptor-ref name="defaultStack">
<param name="workflow.excludeMethods">choose</param>
</interceptor-ref>
</action>
Run Code Online (Sandbox Code Playgroud)
但它在bankingAuthenticator拦截器和验证上都会跳过.
是否可以设置OpenGL场景以实现像素完美渲染和像素blitting?我注意到通过以下方式设置场景:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, width, height, 0.0, 0.0, 1.0);
Run Code Online (Sandbox Code Playgroud)
然后使用以下方法绘制像素:
glBegin(GL_POINTS);
glVertex2i(0, 0);
glEnd();
Run Code Online (Sandbox Code Playgroud)
难道不是一直画到每个硬件配置的左上角的像素(有时是一个像素向左,或者一个下面的左上角).我意识到这可能是由于图形驱动程序对OpenGL的不同实现,但是有没有办法让左上角的像素为(0,0),右下角为(width-1,height-1) )始终如一?这有点不标准化似乎很奇怪......
我见过一些使用(0.375,0.375)或(0.5,0.5)翻译的'hacks',但这似乎也解决了一些配置而不是其他配置.
我有一个我的项目的存储库,它有一个嵌套的存储库,使用该svn:externals属性来更新外部库中的文件.问题是我需要从这个库中的一个标题中注释掉一个函数声明,并使用根存储库携带修改后的标题.
有没有办法可以做到这一点,所以当库更新时,它会覆盖我的版本的特定文件?
我试图在PHP中证明需要准备好的语句,但是我遇到了一些问题,因为PHP通过表单传递字符串来做一些方便的奇怪事情.
我试图"破解"的陈述很简单:
SELECT username FROM users WHERE username = '$username' AND password = '$password'
但是做一些像X' or TRUE;--输入密码的东西实际上并不起作用,因为PHP会自动转义单引号并将语句转换为:
SELECT username FROM users WHERE username = '$username' AND password = 'X\' or TRUE;--'
由于单引号转义,密码相等性保持不变.这种说法是否安全?如果没有,它怎么能被打破?
我最近刚开始与多线程工作boost::thread,我还是有点不清楚一些细节,但是从我的理解,thread::join是当你想要的"父"线程被阻塞并等待线程完成使用(我确定它还有更多,但我相信这是一个用途).
在我正在编写的程序中,我有一个线程加载了一堆资源,然后在最后一行,将其状态设置为'finished'.主线程等待此状态然后调用join,但它似乎需要大约2秒才能解除阻塞.
有这个原因,还是我做错了什么?