写了这个小类,每次创建这个类的对象时都会生成一个UUID。
#include <boost/uuid/uuid.hpp>
#include <boost/uuid/uuid_generators.hpp>
#include <boost/uuid/uuid_io.hpp>
class myClass {
public:
boost::uuids::uuid GetUUID();
virtual ~myClass();
myClass() { // constructor
mId = boost::uuids::random_generator()();
std::cout<< "object created with uuid " << mId <<std::endl;
}
private:
boost::uuids::uuid mId;
}
在某些时候,我正在将这些对象推送到向量,并使用简单赋值运算符将该向量与另一个向量等同。为了确保新向量中的对象不生成新的UUID,我想编写一个复制构造函数。但正如您所看到的,构造函数不需要参数。所以我不知道如何编写复制构造函数。此外,如果我有多个变量而不是一个UUID,我该如何处理这种情况?
答案 0 :(得分:5)
您需要以下签名:
myClass(const myClass& other)
{
mId = other.mId;
}
以及赋值运算符
myClass& operator=(const myClass& other)
{
mId = other.mId;
return *this;
}
请注意,如果不实现这些,编译器生成的将执行浅拷贝,因此不会生成新的UUID。但你应该让他们遵守三条规则(毕竟你确实有一个析构函数)。
答案 1 :(得分:2)
编译器将为您生成复制构造函数和赋值运算符。如果这个操作必须做的唯一事情是复制所有成员,那么编译器生成的操作将完全执行此操作。如果没有,复制构造函数的签名是:
myClass( const myClass& other )
作业的签名是:
myClass& operator=( const myClass& other )
亲切的问候
的Torsten
答案 2 :(得分:0)
在这种情况下,编译器生成的默认复制构造函数和赋值运算符应该按预期执行,因此您无需显式定义它。