1

我一直在尝试将自定义 SecureAllocator 与 basic_string 和 STL 容器一起使用,但我运气不佳。

typedef std::basic_string< char, std::char_traits< char >, SecureAllocator< char > > SecureString;

SecureString value = "hello, world!";

vector< SecureString > collection;

collection.push_back( value );


In file included from /Users/bcrowhurst/source/utility/string_impl.cpp:31:
In file included from /Users/bcrowhurst/build/../source/utility/string_impl.h:31:
/usr/bin/../lib/c++/v1/string:2162:19: error: invalid operands to binary expression ('allocator_type' (aka 'SecureAllocator<char>') and 'allocator_type')
        if (__alloc() != __str.__alloc())
            ~~~~~~~~~ ^  ~~~~~~~~~~~~~~~

环境

Mac OSX 狮子

Apple clang 版本 3.1 (tags/Apple/clang-318.0.61) (基于 LLVM 3.1svn)

目标:x86_64-apple-darwin11.4.0

线程模型:posix

4

1 回答 1

3

您必须为您的分配器类型实现比较运算符,告诉它们是否“等效”,以便它们可以互换使用(或不使用)。

比较两个分配器的要求a1 == a2

仅当从每个分配的存储可以通过另一个释放时才返回 true。 operator==应该是自反的、对称的和传递的,并且不会通过异常退出。

并且对于a1 != a2

一样!(a1 == a2)

于 2012-07-14T15:41:36.203 回答