我已经用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++可以针对这个特定项目进行编译(出于速度/性能方面的考虑):尽管我怀疑某些数学天才可以提供算法解决方案,但无可厚非,但这是一个单独的问题。

最佳答案

我能给出的最佳答案是,您不应该以传统方式使用指针。 C++ 11改变了程序员处理内存管理的方式。

与其解释已经比我本人聪明得多的人已经详细解释过的事情,我仅提供一些链接。

首先应该看的是Herb Sutter的Article Elements of Modern C++ Style
然后查看Bjarne Stroustrup C++11 Style的视频

如果您能够使用新的C++ 11标准,它将使内存管理比以前更加整洁。

08-26 19:48