代码之家  ›  专栏  ›  技术社区  ›  Matt_JD

使用没有增强指针的STL容器

  •  1
  • Matt_JD  · 技术社区  · 15 年前

    我的公司目前还没有被Boost库所收购,虽然我已经使用了它们,并且已经让它们完成了一些工作,但是由于某些项目的性质,它们将不被允许使用Boost。基本上,库(如boost)不能用于工作,因此默认情况下,我只能使用可用的库(当前使用的是Visual Studio 2005)。

    所以…我的问题是,如果我不能使用boost::shared_ptr及其小兄弟,那么在使用带指针的stl容器时,还有什么选择呢?

    我看到的一个选项是编写一个容器类,比如一个共享的指针,它负责处理一个给定的指针,但是我想先知道是否还有其他的选择。

    4 回复  |  直到 15 年前
        1
  •  3
  •   luke    15 年前

    如果他们不接受这种提振,我想其他“不在这里开发”的图书馆是不可能的。

    在我看来,你还有两个选择:

    • 滚动您自己的共享资源。
    • 使用原始指针,自己管理内存。

    两者都不是理想的,每一个都有它自己的痛苦。你的拯救恩典可能是你拥有所有的资源来提升你的可用性。您可以将它用作编写自己的共享资源的模型。

        2
  •  2
  •   Kirill V. Lyadvinsky    15 年前

    在Visual Studio 2008中提供 std::tr1::shared_ptr . 我不确定它是否在VS2005中可用,您应该检查一下。

        3
  •  1
  •   StampedeXV    15 年前

    这完全取决于你想做什么。对于使用指针的项目来说,共享指针并不是绝对必要的。

    如果您真的需要它们,可以将那些您真正需要的类/模板/函数导入到您自己的项目中(如果可能的话),而不导入整个boost lib。

        4
  •  0
  •   Eamon Nerbonne    15 年前

    不知道背景,很难说为什么不允许Boost的图书馆。如果原因是为了避免复杂的依赖关系,那么您可以很容易地解决这个问题:几乎所有的Boost库都只使用一个简单的include头:简而言之,它们不需要链接,从而避免dll hell或其任何变体。

    因此,如果由于链接(无论是静态的还是动态的)外部库的复杂性而不受欢迎,您可以简单地将所需的boost头手工复制到项目中,并直接使用它们。

    为了清晰起见,为了使将来的升级和维护更容易,我避免重命名Boost库(这样未来的编码人员就知道代码的来源)。如果“他们”不希望这样简单的代码包含,那么,您可以提出这样的论点:很多boost头都要包含在规范中,并且他们将为每个人节省大量的麻烦和时间。在法律上,Boost许可证专门设计为尽可能容易和安全地集成:所有文件都有一个明确的许可证,允许所有相关的事情,并且几乎所有LIB都有完全相同的许可证。

    不过,我很好奇:为什么不允许加高头球?