Попробуй
QDockWidget *dock = new QDockWidget; 
QWidget *widget = new QWidget; 
dock->setWidget(widget);
должно получиться.
В деструкторе, наверно приложения или mainwindow, проверь наличие ненулевого указателя на widget и в этом случае удали его с помощью delete. 
добавлено спустя 52 секунды:
 Последнее предложение относится к случаю завершения приложения.
QWidget *widget = new QWidget; - этот момент меня не устравивает, потому что этот виджет должен знать кто ему парент, потому как он своему паренту определенные настройки передает. 
добавлено спустя 1 час: Вот код. На самом деле указатель на виджет который потом устанавливается на доквиджет, я получаю из плагина. Так вот если выгрузить плагин, то приложение падает по завершению, если не выгружать, а просто удалить виджет (m_Plugin->deactivate()), то не падает.
MainWindow::MainWindow(QWidget *parent, Qt::WFlags flags)
	: QMainWindow(parent, flags)
{
	m_Dw = new QDockWidget(this);
	addDockWidget(Qt::RightDockWidgetArea, m_Dw);
	m_Loader = new QPluginLoader("ddoverlay.dll", this);
	if (m_Plugin = qobject_cast<IRenderingPlugin*>(m_Loader->instance()))
	{
		if (QWidget *wg = m_Plugin->activate(m_Dw, QSize(720,576)))
			m_Dw->setWidget(wg);
	}
	QPushButton *btn = new QPushButton(this);
	connect(btn, SIGNAL(clicked()), this, SLOT(deactivate()));
	setCentralWidget(btn);
}
MainWindow::~MainWindow()
{
}
void MainWindow::deactivate() {
	if (m_Plugin) {
		m_Plugin->deactivate();
		m_Dw->setWidget(0);
		m_Loader->unload();
	}
}
  добавлено спустя 1 час 12 минут: Все прояснилось - полностью мой косяк. Там в этом плагине я паренту еще инсталил эвент фильтер. И забыл его удалить. Вот, и после того как плагин выгружался, адрес терялся, а при уничтожении доквиджета, последний пытался грохнуть этот эвент фильтер.
И вообще, как выяснилось, на будующее, если вы где-то мочите собственноручно чайлда, то он автоматически удаляется из списка чилдренов родителя. Цитата из асистанта:
You can also delete child objects yourself, and they will remove themselves from their parents.
Поэтому предложения типа "перед удалением setParent(0)" изначально не имели бы никакого эфекта.