由于性能原因,我想通过使用对memcpy的单个调用来将CA类的所有成员复制到CB类的成员中。

以基本形式,我认为这是可能的,因为它们都是CPtr类的所有成员,仅包含指针。

如果我使用类似boost::shared_ptrstd::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/

10-11 21:57