Во-первых, я думаю, что сигнатура вашей функции clone может быть
virtual std::unique_ptr clone() = 0;
, так как вы хотите получить глубокие копии экземпляров A
и исключительного права собственности в B
. Во-вторых, вам действительно нужно определить конструктор копирования для вашего класса, когда вы хотите, чтобы он был скопирован. То же самое для оператора присваивания. Это связано с тем, что std::unique_ptr
- это тип только для перемещения, что мешает компилятору генерировать реализации по умолчанию.
Другие специальные функции-члены не нужны, хотя они могут иметь смысл. Компилятор не будет генерировать конструктор перемещения и переместить оператор назначения для вас (поскольку вы отправляете свои собственные функции копирования / назначения), хотя в вашем случае вы можете = default;
их легко. Деструктор можно точно определить с помощью = default;
, который будет соответствовать директиве ядра .
Обратите внимание, что определение деструктора через = default
должно выполняться в единица перевода, поскольку std::unique_ptr
требует, чтобы полный тип был известен при освобождении его ресурса.
Независимо от того, нужен ли вам конструктор по умолчанию, полностью зависит от того, как вы хотите использовать класс B
.
Можно использовать Система. Диагностика. Отладчик. Свойство IsAttached, чтобы проверить, присоединен ли отладчик к процессу. Это приложение будет ожидать, пока отладчик не был присоединен:
using System;
using System.Diagnostics;
using System.Threading;
namespace DebugApp
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Waiting for debugger to attach");
while (!Debugger.IsAttached)
{
Thread.Sleep(100);
}
Console.WriteLine("Debugger attached");
}
}
}
Я не знаю, так как я никогда не пробовал его, но интересно, могли ли Вы использовать System.Diagnostics.Debugger.Break()
для имения его, поразил точку останова и затем ожидают отладчика для присоединения. Я предполагаю, что удаленный отладчик работал бы, но я не знаю наверняка и в настоящее время не имею доступа к своей домашней среде, где я мог легко копировать его и протестировать мою теорию. Существует статья MSDN, говорящая об использовании его в приложении ASP.NET, таким образом, я предполагаю, что это работало бы.
Debug.Assert(true);
должен также работать, я предполагаю. Между прочим, я также время от времени сталкиваюсь с этим proble, и я делаю
MessageBox.Show()
:P :P
Установите тайм-аут, который дает Вам время для присоединения отладчика.
Thread.Sleep(30000);