c++ - C++ 中的用户定义类型和 std::vector

标签 c++ vector std user-defined-types

<分区>

我正在尝试用 C++ 创建一个二维点 vector 。我的问题是在使用 std::vector 存储点之前是否需要为二维点定义复制构造函数、赋值运算符和默认构造函数? 另外,如何为 std 库中定义的 vector 重载运算符/创建成员函数? 感谢您的帮助:)

最佳答案

用户定义的类型总是需要良好的复制语义。即使您没有将它们放入 vector 中也是如此。将一个对象复制到另一个对象的含义各不相同,但显然有一个要求是这样做不应使程序崩溃。所以真正的问题是您的用户定义类型是否具有良好的复制语义。显然没有看到类型很难说。

如果你有一个像 struct Point { int x, y; 这样的简单类型}; 那么这已经具有良好的复制语义,您不需要再做任何事情。如果您的类包含本身具有良好复制语义的其他对象,则同样适用,因此如果您想在类型中包含 std::string 没有问题,例如struct NamedPoint { std::string 名称;整数 x, y; };

通常当类必须在析构函数中执行某些操作(例如删除一些内存)时,就会出现问题。然后你需要写一个赋值运算符和拷贝构造函数。

可以找到更多详细信息 here .

PS,您链接的讨论有些困惑。

关于c++ - C++ 中的用户定义类型和 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53879844/

相关文章:

C++ 将 NAN 值分配给 union 内的 float

c++ - 如何廉价地将 C 样式数组分配给 std::vector?

c++ - 为自定义库实现 lock_guard 的正确 C++ 方法

c++ - 使用 std::copy 复制所有元素的地址

c++ - Windows 链接

c++ - 我们应该用什么来代替 DCOM 通信?

java - 两个do while循环

c++ - 返回类型 Vector

c++ - std::list 的 erase 成员函数是否为所有存储的元素调用析构函数?

c++ - 完美转发和 std::tuple(或其他模板类)