【问题标题】:How to create std::string wrapper that would keep ptr to std::string and ptr to special class function from class that created that wrapper instance?如何创建 std::string 包装器,它将 ptr 保留到 std::string 并将 ptr 保留到创建该包装器实例的类的特殊类函数?
【发布时间】:2012-01-25 16:01:01
【问题描述】:

我有课。它有一个函数void delete_ptr(void *);void push_into(std::set<my_string> ** pps);。我有这个类的 10 个实例。每个都分配在不同的堆上。我的程序在主堆中,与我的地图相同。我想用我的主地图调用我的每个班级实例push_into。每个 push_into 都会调用 (**pps).insert(std::string("Hello str"));(**pps).insert("Hello char");。如何创建这样的my_string 类,将**std::string 保留在其中,以及ptrdelete_ptr 的创建my_string 类实例的类?

我想知道的主要目标是:

  • 如何创建其构造函数以使其保持指向创建它的实例的字符串和 delete_ptr 的指针?

【问题讨论】:

  • 你可能想看看分配器。该方法与您描述的方法不同,但更具可扩展性。

标签: c++ windows visual-studio-2010 boost heap-memory


【解决方案1】:

您可以将boost::shared_ptrcustom deallocator 一起使用。使用 boost::bind 提供您的 delete_ptr 作为自定义解除分配器

【讨论】:

  • 是否有可能让 my_string 至少尝试让 ptr 指向其创建者的delete_ptr
  • 是否需要delete_ptr 才能删除my_stringshared_ptr 将为您处理此问题。只需将boost::shared_ptr<std::string> 存储在您的sets 中,为它们提供自定义比较器并在构造时提供指向您的delete_ptr 的指针。如果你需要例子请评论,我明天发,现在我要回家了
  • 我的主要观点是向某些 API 用户隐藏他将除了字符串之外的其他内容发送到集合中......)
  • @myWallJSON:在这种情况下,正如 Dietmar 建议的那样,分配器可能是最好的方法。
猜你喜欢
  • 2017-04-11
  • 2018-05-13
  • 1970-01-01
  • 2011-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多