这个问题试图收集每年出版的数十本不良C++书籍中的少数珍珠.
与许多其他编程语言不同,这些编程语言经常从互联网上的教程中随处获取,很少有人能够快速学习C++,而无需学习编写精良的C++书籍.这样做太复杂了.事实上,它是如此庞大和复杂,有很多非常糟糕的C++书籍.我们并不是在谈论糟糕的风格,而是体育明显的事实错误和促进糟糕的编程风格.
请编辑接受的答案,以提供高质量的书籍和近似的技能水平 - 最好 在 C++聊天室讨论您的添加后.(如果他们不同意建议,常客可能会毫不留情地撤销你的工作.)添加一篇关于你亲自阅读/受益的每本书的简短描述/描述.随意讨论质量,标题等.符合标准的书籍将被添加到列表中.由C和C++用户协会(ACCU)撰写评论的图书都有指向评论的链接.
*注意:常见问题和其他资源可以在C++标签信息和c ++ - faq中找到.
我一直在使用C++,我一直在想新的关键字.简单地说,我应该使用它吗?
1)使用新关键字...
MyClass* myClass = new MyClass();
myClass->MyField = "Hello world!";
Run Code Online (Sandbox Code Playgroud)
2)没有新的关键字......
MyClass myClass;
myClass.MyField = "Hello world!";
Run Code Online (Sandbox Code Playgroud)
从实现的角度来看,它们看起来并没有什么不同(但我确定它们是......)但是,我的主要语言是C#,当然第一种方法就是我习惯的方法.
困难似乎是方法1更难用于std C++类.
我应该使用哪种方法?
我最近使用new关键字作为堆内存(或免费存储)用于超出范围的大型数组(即从函数返回).在我使用堆栈之前,导致一半的元素在范围之外被破坏,切换到堆使用确保元素是完整的.好极了!
我的一位朋友最近告诉我,使用new关键字有一个简单的规则; 每次打字new,输入delete.
Foobar *foobar = new Foobar();
delete foobar; // TODO: Move this to the right place.
Run Code Online (Sandbox Code Playgroud)
这有助于防止内存泄漏,因为您总是必须将删除放在某处(即,当您将其剪切并粘贴到析构函数或其他方式时).