我是一名C++程序员,考虑将D用于我想要玩的个人项目.我想知道是否有办法完全禁用垃圾收集器,以及这样做的风险是什么.
我知道我可以通过覆盖new和delete来管理我自己的内存以使用malloc和free,但如果我这样做,我宁愿垃圾收集器根本不运行.
因此,我一直在讨论脚本语言在游戏开发中的正确作用.据我所知,有两种思想流派:
1)脚本语言功能强大且功能齐全.大部分游戏代码都是用语言编写的,代码只有在性能表明它是必要的时候才会被转移到C++中.这通常类似于Lua或Unrealscript.
2)这种脚本语言非常有限.几乎所有的游戏代码都是用C++编写的,语言只是为了向设计人员公开底层功能.
我的挫折感来自于看到经常被滥用的第二种方法,大型系统以一种语言实现,该语言没有使该代码可维护的功能.
所以我开始支持第一种方法,但在与一些设计师交谈之后,我意识到他们中的许多人似乎更喜欢第二种,而且大部分程序员更喜欢一种.
所以我仍然想知道哪种方法更好.我只是看到错误的代码并指责工具而不是程序员,还是我们真的需要一个更复杂的工具?
我遇到了这个片段
template <typename T, size_t N>
char (&ArraySizeHelper(T (&array)[N]))[N];
#define arraysize(array) (sizeof(ArraySizeHelper(array)))
Run Code Online (Sandbox Code Playgroud)
在这篇文章http://software.intel.com/en-us/articles/pvs-studio-vs-chromium/
我见过其他模板做同样的事情,比如这个
我理解这些,但我一直遇到这个困难.
任何帮助,将不胜感激.
我遇到的问题是,据我所知,删除操作符应该是一个静态函数,但有时编译器(VC++)似乎将它视为动态.
鉴于:
class Base
{
public:
void* operator new(size_t size) { /* allocate from custom heap */ }
void operator delete(void *p) { customFree(p, sizeof(Base)); }
Base() {}
virtual ~Base() {}
};
class Derived: public Base
{
public:
void* operator new(size_t size) { /* allocate from custom heap */ }
void operator delete(void *p) { customFree(p, sizeof(Derived)); }
Derived() {}
virtual ~Derived() {}
}
Run Code Online (Sandbox Code Playgroud)
我看到的是删除基指针将导致调用Derived::opeator删除.
Base *p = new Derived();
delete p; //calls Derived::operator delete
Run Code Online (Sandbox Code Playgroud)
如果我没有定义任何析构函数,那么我得到了我预期的结果:调用Base …