gpt4 book ai didi

c++ - 我可以防止对象被 std::memcpy 复制吗?

转载 作者:IT王子 更新时间:2023-10-28 23:35:37 27 4
gpt4 key购买 nike

使用私有(private)复制构造和赋值运算符,boost::noncopyable 或 C++11 delete 关键字很容易制作不可复制的类:

class MyClass {
private:
int i;
public:
MyClass(const MyClass& src) = delete;
MyClass& operator=(const MyClass& rhs) = delete;
int getI() {
return i;
}
MyClass(int _i) : i(_i){}
};

int main() {
MyClass a(1), b(2);
a = b; // COMPILATION ERROR
}

但是这并不能阻止对象被深度复制为一组字节:

int main() {
MyClass a(1), b(2);
std::memcpy(&a, &b, sizeof(MyClass));
std::cout << a.getI() << std::endl; // 2
}

即使尝试通过声明 operator& 私有(private)来阻止它,仍然可以使用地址成语的实现来进行复制:

int main() {
MyClass a(1), b(2);
std::memcpy(std::addressof(a), std::addressof(b), sizeof(MyClass));
std::cout << a.getI() << std::endl; // 2
}

有没有什么方法可以完全防止实例被逐字节复制?

最佳答案

Can I prevent object from being copied by std::memcpy?

简单的答案是“不”。

关于c++ - 我可以防止对象被 std::memcpy 复制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29759105/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com