我有这个代码:
struct TestDataElement1
{
unsigned int something;
};
struct TestDataElement2
{
boost::shared_ptr<TestDataElement1> testDataElement1;
};
TestDataElement1 test1;
test1.something = 100;
TestDataElement2 test2;
test2.testDataElement1 = boost::make_shared<TestDataElement1>(test1);
cout << "TEST1: " << test2.testDataElement1 -> something << endl;
test1.something = 200;
cout << "TEST2: " << test2.testDataElement1 -> something << endl;
Run Code Online (Sandbox Code Playgroud)
哪个产生这个:
TEST1:100
TEST2:100
但是我无法理解它为什么不产生100,200,因为test2只有一个指向test1的指针.
模板函数boost :: make_shared的行为与您期望的不同.这条线
test2.testDataElement1 = boost::make_shared<TestDataElement1>(test1);
Run Code Online (Sandbox Code Playgroud)
在语义上等同于
test2.testDataElement1 =
boost::shared_ptr<TestDataElement1>(
new TestDataElement1(test1) );
Run Code Online (Sandbox Code Playgroud)
因此它
TestDataElement1,test2.testDataElement1.所以你只输出test1两次副本的值.
顺便说一下,shared_ptr除非指定自定义删除器,否则您永远无法在堆栈上创建内存.
| 归档时间: |
|
| 查看次数: |
5261 次 |
| 最近记录: |