我有一个基类,它被多个派生类继承。我想创建 baseClass 指针的自动指针数组。当我初始化那些自动指针时,我遇到了一些编译时错误,然后我尝试这样做
std::auto_ptr<base>pbase[3];
std::auto_ptr<base> b1(new derived1());
std::auto_ptr<base> b2(new derived2());
std::suto_ptr<base> b3(new derived3());
pbase[0] = b1;
pbase[1] = b2;
pbase[2] = b3;
它工作正常,我修复了内存泄漏问题,而我是一个窗口,我不使用 valgrind,我使用 boost 框架来解决泄漏问题。
对于编译错误:
class A{
public:
std::auto_ptr<base>pbase[2];
}
在A.cpp文件中
A::A():pbase[0](new derived1()), pbase[1](new derived2()){
}
我收到错误 C2059:syntax error : '['
最佳答案
std::auto_ptr
自 C++11 起已弃用,不应使用,因为其奇怪的复制行为:
std::auto_ptr<int> a(new int(1));
std::auto_ptr<int> b = a; // invalidates a!
它试图实现的目标现在由 std::unique_ptr
干净利落地解决了。在引入移动语义和右值引用之前,这是不可能的。
不过,这似乎不是这里的问题。从您的示例来看,您可能正在泄漏内存,因为您调用了未定义的行为:
pbase[3] = b3; // pbase is std::auto_ptr<base>[3]
// pbase[0] - pbase[2] are valid indexes
事实上,当I fix that problem并对结果运行 valgrind --leak-check=full ./auto_ptr_app
,它告诉我不可能发生泄漏。
关于c++ - 我可以创建一个 auto_ptr 数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18373940/