我已经用 C++ 开始了一个项目。这种语言的内存管理对我来说是新的。
我过去常常用指针创建对象,new ()
然后传递指针,虽然它工作,但调试起来很痛苦,当人们看到代码时,他们看着我很有趣。我为它没有泄漏或段错误(一旦修复)这一事实感到非常自豪,但这确实需要付出很多努力。
list <struct Connection *> users;
struct Connection * accept_connection (const char *name) {
struct Connection * new_node = new Connection ();
new_node->_data = ... // whatever, set it up here
return new_node;
}
struct Connection * new_user = accept_connection (const char *name);
users.append (new_user);
所以我对这个项目的下一个版本有一个新的策略。到目前为止,我正在做的是创建对象new ()
并为其分配一个唯一的整数 ID 号。然后,我使用 ID 作为键将对象存储在哈希表中。现在项目通过整数 ID 号存储和传递,当您确实需要取消引用它时,您转到哈希表,它会返回thing *
或返回NULL
。因此,我不再遇到指针错误,但代码的速度有所降低。
typedef unsigned long ID_Number;
// create a user and return the ID
ID_Number create_user () {
ID_Number new_id = assign_unique_id ();
struct User * node = new User ();
node->_id = new_id;
node->_data = ... // whatever, set it up here
add_to_users_dict (new_id, node);
return new_id;
}
list <ID_Number> users;
for_each (users.begin(), users.end(), process_user);
void process_user (ID_Number i) {
struct User * u_ptr = lookup_user_dict (i);
if (u_ptr == NULL) {
// not found in dict
// somehow this guy was deleted
} else {
// we can do stuff with this guy
}
}
现在我有点熟悉编程的基本原则,但作为一个自学成才的爱好者,我不熟悉行业实践和工具。我基本上要求的是内存管理指南:
1)我在做什么对还是错?
2)我可以使用任何可以帮助我的包或库吗?
3) 行业的标准做法是什么?
4)基本上我应该在谷歌上搜索或购买kindle等什么?
今天我通常使用 Python,它确实为我处理了很多“后端”的东西,但我需要 C 或 C++(我想我使用的是纯 C 加上 stdc++ 库,我不太确定两者之间的重叠在哪里语言是 - 我只知道 g++ 可以很好地编译它)出于速度/性能原因的这个特定项目:尽管我怀疑一些数学天才可以提供算法修复来加速它,尽管这是一个单独的问题。