由于性能原因,我想通过使用对memcpy
的单个调用来将CA类的所有成员复制到CB类的成员中。
以基本形式,我认为这是可能的,因为它们都是CPtr
类的所有成员,仅包含指针。
如果我使用类似boost::shared_ptr
或std::shared_ptr
的指针代替指针怎么办?
这个想法有意义吗,我可以获取&a_和&c_的地址,计算偏移量,并为&f_做memcpy
吗?
class CBase {
virtual ~CBase(){}
};
class CPtr : public CBase{
int* p_; // what If I have shared_ptr<int> p_; ?
};
class CA {
public:
CPtr a_;
CPtr b_;
CPtr c_;
};
class CB {
public:
CPtr e_;
CPtr f_;
CPtr g_;
};
最佳答案
由于CPtr
不是POD(它具有带有虚函数的基类),因此您不能通过memcpy
合法地将其复制。因此,这样做是非常的坏主意。
关于c++ - C++类成员和内存位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22172346/