C++的缺省拷贝构造和浅拷贝有没有区别?
資深大佬 : James369 1
比如一个类:
class Test { public: std::string s; //s 在浅拷贝的时候,是否会调用 std::string 的拷贝构造? float a; } std::shared_ptr<Test> function() { ... auto test = Test(); //栈上创建 test.s = "aaa"; test.a = 111; auto result = std::make_shared<Test>(test); //调用 Test 缺省构造函数,即 memcpy? return result; } int main() { auto ret = function(); ... }
此时发生浅拷贝,如果直接 memcpy 覆盖过去,那么成员变量 s 指向的字符串的内容是栈上的,离开栈就会发生内存访问错误。但实际测试并没有发生内存错误。
大佬有話說 (15)