【发布时间】:2012-08-15 04:33:57
【问题描述】:
我正在尝试使用 tr1 的 shared_ptr 和 Qt 4.8.2,但我遇到了一些麻烦。 这是我的代码:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <string>
#include <tr1/memory>
using namespace std::tr1;
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QTreeView>
#include <QListView>
#include <QWidget>
#include <iostream>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
shared_ptr<QHBoxLayout> mainLayout(new QHBoxLayout);
shared_ptr<QTreeView> mainFeeds(new QTreeView);
mainLayout->addWidget(mainFeeds.get());
shared_ptr<QWidget> mainWidget (new QWidget);
mainWidget->setLayout(mainLayout.get()); // <--- this line
shared_ptr<QWidget> rightWidget(new QWidget);
shared_ptr<QVBoxLayout> rightLayout(new QVBoxLayout);
shared_ptr<QListView> rightItems(new QListView);
rightLayout->addWidget(rightItems.get());
shared_ptr<QListView> rightPreview(new QListView);
rightLayout->addWidget(rightPreview.get());
rightWidget->setLayout(rightLayout.get());
mainLayout->addWidget(rightWidget.get());
this->setCentralWidget(mainWidget.get());
}
MainWindow::~MainWindow()
{
delete ui;
}
以及输出(我使用 Qt Creator):
正在启动 /path/myproject-build-desktop-Qt_4_8_2_in_PATH_local_Release/myproject... 程序意外结束。 /path/myproject-build-desktop-Qt_4_8_2_in_PATH_local_Release/myproject 以代码 0 退出
当我注释标记的行时,程序运行但我有一个空窗口。
我有两个问题:
- 为什么这行会出错?
- 在 Qt 中使用智能指针(实际上是为了构建健壮的 C++ 代码)是正确的方法吗?
为了您的帮助, 提前, 谢谢。
【问题讨论】:
-
使用调试器跟踪执行到错误发生点。
标签: c++ qt shared-ptr smart-pointers