我有以下程序 -C++移動的unique_ptr一個struct構件
#include <iostream>
#include <memory>
class Person
{
public:
Person(const std::string& name):
name(name) { }
~Person() { std::cout << "Destroyed" << std::endl; }
std::string name;
};
typedef struct _container
{
std::unique_ptr<Person> ptr;
}CONTAINER;
void func()
{
CONTAINER* c = static_cast<CONTAINER*>(malloc(sizeof(CONTAINER)));
std::unique_ptr<Person> p(new Person("FooBar"));
c->ptr = std::move(p);
std::cout << c->ptr->name << std::endl;
}
int main()
{
func();
getchar();
return 0;
}
該程序打印 「FooBar的」。我希望程序在func()返回時打印「銷燬」,但不會。有人可以幫我解釋爲什麼在這種情況下不會發生這種情況嗎?
啊,我明白了。由於malloc'd區域不是「智能」,因此程序不跟蹤「c」跟蹤跟蹤唯一指針範圍的方式。 –
@Jai Prabhu是的,我認爲這是正確的。 – javaLover
不好 - 比這更糟的是,將一個malloc'd緩衝區轉換爲具有構造函數的類型是未定義的行爲 - 並且該程序允許產生它喜歡的任何垃圾。 –