C++类成员和内存位置
C++ class members and memory position
出于性能原因,我想通过使用单个调用来复制类 CB 成员中类 CA 的所有成员memcpy
。
在基本形式中,我认为这是可能的,因为它们都是只包含指针的类CPtr
的成员。
如果我使用类似boost::shared_ptr
或std::shared_ptr
之类的东西代替指针怎么办?
这个想法有意义吗,我可以得到 &a_ 和 &c_ 的地址,计算偏移量并memcpy
f_ 吗?
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
合法复制它。因此,这样做是一个非常糟糕的主意。
没有使用memcpy
的性能原因。在可以使用memcpy
的地方,复制构造函数将同样高效。
另外,复制构造函数将在您的情况下工作,而memcpy
则不起作用。 memcpy
只能用于"普通旧数据"(POD)类型,这些类型仅使用纯C和可能的非虚拟方法中可用的功能。继承、虚拟成员、构造函数和析构函数都使您的对象成为非 POD,而您实际上拥有所有这些对象。
相关文章:
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 如何在不等待检索的情况下获取C++中的内存位置?
- 向量的内存位置不连续
- 如何根据C++在同一内存位置重新初始化 C# 中的对象(还是自动完成)?
- 常量引用的内存位置
- C++强制变量到一个固定的内存位置
- 为什么未初始化的内存位置的值给出 -842150451 的值?
- 为什么存储在内存位置的值会发生变化?
- 在特定内存位置构造 c++ 对象
- 如果不初始化结构中的向量,它会自动为空还是具有随机内存位置的值?
- 内存位置出现Microsoft C++异常:std::out_of_range
- 函数,返回变量c++占用的内存位置的大小
- 无法在 Opencv 中显示图像导致内存位置
- 从十六进制到双的转换始终导致内存位置的 std::out_of_range
- 错误 在测试.exe 0x76C9FD62时出现未经处理的异常:Microsoft C++异常:内存位置0x006FF8
- 错误:内存位置的 std::length_error
- C++不同内存位置中的默认数组值
- 为什么动态分配的两个变量的内存位置不是连续的?
- Boost.进程间内存位置
- 查找编译时构造类的内存位置