c++ - 我可以创建一个 auto_ptr 数组吗?

标签 c++ visual-studio-2010 visual-c++ auto-ptr

我有一个基类,它被多个派生类继承。我想创建 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/

相关文章:

C++ 异常抛出/捕获优化

c# - VS2010 - 添加新项目不会继承现有的构建配置

visual-c++ - 将 char[] 转换为 LPCWSTR

c++ - 重载采用 chrono::duration 的函数

c++ - 如何在 C++ 中创建一个适用于 Windows 和 Linux 的文件夹(目录)

python - PyEval_CallObject 和 PyObject_CallObject 返回一个空对象

python - ld : library not found for -lboost_python on MacOS

c++ - 来自 2 个摄像头(用于立体视觉)的视频使用 OpenCV,但其中一个滞后

visual-studio-2010 - 带有向导的 Visual Studio 项目模板

c++ - 将指针转换为 int 并返回类型化对象