事实上,从 Java 或 C# 之类的语言迁移到 C++ 可能会令人生畏,我也经历过。
第一个也是最重要的区别是,在 C++ 中,您几乎总是管理自己的内存。在堆上创建对象时,您有责任将其删除,这样它就不会泄漏内存——这反过来意味着您可以在认为合适时将其删除。在堆栈上创建对象时,它会在超出范围时自动删除 - 您必须注意不要在超出范围后使用它。
例子:
void do_queue(B& queue)
{
Evt *e = new Evt;
queue.queueEvent(e);
} // all well, e can be popped and used (also must be deleted by someone else!)
相对
void do_queue(B& queue)
{
Evt e;
queue.queueEvent(&e);
} // e is out of scope here, popping it from the queue and using it will most likely cause a sigseg
话虽如此,这两种方法在一个方面也有很大不同:第一种方法是创建一个对象。第二个创建一个指向对象的指针。拥有指针的好处是您可以将它们作为参数传递,而只需在堆栈上复制最少的内存(复制的是指针,而不是整个对象)。当然,您始终可以使用“&”获取分配在堆栈上的对象的地址,或者将其作为引用传递 - 但是,在使用分配在堆栈上的对象时,您要特别注意它们的范围。
当我从 Java 迁移到 C++ 时,我发现这个网站是一个很好的资源:http: //www.parashift.com/c++-faq-lite/ - 你可能也会发现它,它提供了很多很好的解释