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