小编Big*_*ich的帖子

关闭D垃圾收集器

我是一名C++程序员,考虑将D用于我想要玩的个人项目.我想知道是否有办法完全禁用垃圾收集器,以及这样做的风险是什么.

我知道我可以通过覆盖new和delete来管理我自己的内存以使用malloc和free,但如果我这样做,我宁愿垃圾收集器根本不运行.

memory garbage-collection memory-management d

24
推荐指数
2
解决办法
5722
查看次数

脚本语言在游戏编程中的作用

因此,我一直在讨论脚本语言在游戏开发中的正确作用.据我所知,有两种思想流派:

1)脚本语言功能强大且功能齐全.大部分游戏代码都是用语言编写的,代码只有在性能表明它是必要的时候才会被转移到C++中.这通常类似于Lua或Unrealscript.

2)这种脚本语言非常有限.几乎所有的游戏代码都是用C++编写的,语言只是为了向设计人员公开底层功能.

我的挫折感来自于看到经常被滥用的第二种方法,大型系统以一种语言实现,该语言没有使该代码可维护的功能.

所以我开始支持第一种方法,但在与一些设计师交谈之后,我意识到他们中的许多人似乎更喜欢第二种,而且大部分程序员更喜欢一种.

所以我仍然想知道哪种方法更好.我只是看到错误的代码并指责工具而不是程序员,还是我们真的需要一个更复杂的工具?

c++ scripting

20
推荐指数
4
解决办法
2万
查看次数

这个数组大小模板如何工作?

我遇到了这个片段

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/

我见过其他模板做同样的事情,比如这个

使用模板获取数组的大小和结束地址

我理解这些,但我一直遇到这个困难.

任何帮助,将不胜感激.

c++ templates metaprogramming

16
推荐指数
2
解决办法
6059
查看次数

如何覆盖C++中的删除行为?

我遇到的问题是,据我所知,删除操作符应该是一个静态函数,但有时编译器(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 …

c++ memory

9
推荐指数
2
解决办法
1万
查看次数